Verwenden Sie "less", um kommaausgerichtete Daten anzuzeigen

7

Ich habe eine große CSV-Datei.

Ich möchte meine Datei mit lesseinem ähnlichen Befehl anzeigen , der nicht die gesamte Datei auf einmal lesen muss, um mir einen Teil davon anzuzeigen .

Gibt es da draußen einen Befehl, der mir meine Datei in durch Kommas ausgerichteten Spalten anzeigen kann?

Richard
quelle
1
Ich stelle hier ein Problem fest: Sie möchten eine durch Kommas ausgerichtete Ansicht, möchten aber gleichzeitig, dass das Programm nicht die gesamte Datei liest ... Um jedoch die korrekt ausgerichteten Daten anzuzeigen, müsste das Programm die durchlesen Datei, um die maximale Breite einer Spalte zu bestimmen!
Rozcietrzewiacz
Ich habe daran gedacht, aber ich sehe das nicht als Hindernis. Es kann immer nur ein fester Teil einer Datei angezeigt werden, und es ist mir egal, ob die Spalten ihre Größe dynamisch anpassen. Entweder das oder was auch immer dieses magische Programm ist, Sie drücken eine Taste und es richtet sich neu aus.
Richard
Das heißt, @rozcietrzewiacz, dass für Anzeigezwecke nur die lokalen Maxima wichtig sind. Besonders wenn Sie sich an das größte lokale Maximum erinnern, das Sie bisher gesehen haben und das zum globalen Maximum tendiert.
Richard
1
Crossposting? askubuntu.com/questions/57369/…
Enzotib
In der Tat, @enzotib. Ich hatte gedacht, dass dies ursprünglich nicht für den Stapelüberlauf geeignet war, aber andere Leute, die dorthin zurückwiesen, schienen implizit zu implizieren, dass dies der Fall war.
Richard

Antworten:

7

Ich bin mir nicht sicher, ob das für Sie ausreicht, aber Sie könnten das columnProgramm verwenden und die ausgewählten Teile der Datei mit headund / oder tailwie folgt lesen :

 head -n 300 myfile.csv | tail -n 100 | column -ts ',' | less
 head -n-300 myfile.csv | head -n 100 | column -ts ',' | less

Sie können es in ein Skript einbinden, um verschiedene Teile der Datei gleichzeitig anzuzeigen (wahrscheinlich ohne lessdann). Abgesehen davon befürchte ich, dass es ein Problem wäre, nur die GNU-Tools für den Job zu verwenden.

rozcietrzewiacz
quelle
Nach meiner Erfahrung versucht weniger nicht standardmäßig, die gesamte Datei zu lesen, sollte also einfach colum -ts ',' myfile.csv | lessfunktionieren.
Klox
3
lessoffensichtlich nicht, aber columntut es - also ist es doch keine gute Lösung ...
rozcietrzewiacz
1
Siehe auch 'man cut', um nur bestimmte Spalten anzuzeigen, z. B. cut -d',' -f1,4-6würden nur die Spalten 1,4,5 und 6 zurückgegeben
symcbean
3

Verwenden Sie, lessaber wenn Sie möchten, dass die CSV-Daten spaltenausgerichtet angezeigt werden, leiten Sie die aktuelle Seite durch den folgenden column -ts ,Befehl:

       | <m> Shell-Befehl
              <m> steht für einen beliebigen Markierungsbuchstaben. Leitet einen Abschnitt der Eingabe weiter
              Datei auf den angegebenen Shell-Befehl. Der Abschnitt der Datei zu sein
              Die Leitung erfolgt zwischen der ersten Zeile des aktuellen Bildschirms und der
              Position durch den Buchstaben markiert. kann auch ^ oder $ zu indi- sein
              Geben Sie den Anfang bzw. das Ende der Datei an. Wenn ja. oder neu-
              Linie wird der aktuelle Bildschirm weitergeleitet.

       m Nach einem Kleinbuchstaben wird die aktuelle Position markiert
              mit diesem Brief.

also verwenden |.column -ts ,inless

RedGrittyBrick
quelle
2

Ich habe gute Erfahrungen damit gemacht tabview, obwohl es sich bei großen Dateien nicht immer gut verhält. In Verbindung damit ist heades jedoch ziemlich anständig.

Yuval
quelle
Dieses Programm ist unglaublich. Ich kann diese Antwort nicht akzeptieren, weil ich nach großen Dateien gefragt habe, aber ich würde mehr Stimmen abgeben, wenn ich könnte :-)
Richard
0

Dies ist keine wirklich unixy Frage, aber auf jeden Fall würde ich empfehlen, etwas anderes als lesszum Anzeigen von CSV-Dateien zu verwenden. Es ist nicht wirklich das richtige Werkzeug. Versuchen Sie etwas wie R, das eine gute Unterstützung für das Betrachten und ggf. Arbeiten mit CSV-Dateien bietet. Um beispielsweise 5 Zeilen einer CSV-Datei zu lesen, tun Sie dies

$ R
> read.csv("pheno.csv",nrows=5)
  faid   expid pid mid sex pheno
1 1420 NA12003   0   0   1     0
2 1420 NA12004   0   0   2     0
3 1420 NA10838   9  10   1     0
4 1420 NA12005   0   0   1     0
5 1420 NA12006   0   0   2     0

Sehen

> help(read.csv)

für Hilfe. Siehe auch

> help(write.csv)

zum Schreiben in eine Datei usw.

EDIT: Ich hatte zufällig eine CSV-Datei, die 1.1G ist und 934991 Zeilen lang ist.

$ time Rscript -e 'read.csv("GenomeWideSNP_6.na29.annot.csv", skip=500000, nrows=5, header=FALSE)'

Dies überspringt 500.000 Zeilen und liest 5 Zeilen. R benötigt 1 Minute, um dies zurückzugeben, und erreicht eine Auslastung von 620 MB (!). Es sieht so aus, als würde es die übersprungenen Zeilen in den Speicher lesen, obwohl dies keinen Sinn ergibt.

Das Fazit: Ich bin nicht wirklich ein R-Fan, aber für den Umgang mit kleinen bis mittleren Datenmengen, insbesondere wenn Sie statistische Analysen durchführen möchten, könnten Sie schlechter abschneiden als R. Eine Alternative ist Python und eine CSV-Verarbeitungsbibliothek.

Faheem Mitha
quelle
R mag wunderbar sein, aber ist es das richtige Werkzeug, um einfach die mittleren 20 Zeilen einer CSV-Datei mit 100.000 Zeilen anzuzeigen? Die Frage suchte nach einem Programm, das nicht zuerst die gesamte Datei in den Speicher lud.
RedGrittyBrick
@ RedGrittyBrick: Angemessener Punkt. Siehe hinzugefügtes Beispiel. Die Speichernutzung von R ist in diesem Fall verrückt. Aus diesem Grund sind Python oder Perl möglicherweise besser, wenn die Speichernutzung ein Problem darstellt. Sie wären wahrscheinlich auch schneller.
Faheem Mitha