Linux-Befehlszeile für große Datenmenge?

749
Anna

Das Problem: Ich habe eine große Excel-Datei, es gibt über 1000 Spalten und über 40.000 Zeilen. Ich muss feststellen, wo eine bestimmte Zeile in einer bestimmten Zelle einen Wert von> 199 hat. Wenn eine Zeile nicht> 199 in einer bestimmten Zelle hat, möchte ich diese Zeilen löschen. So bleiben mir nur Zeilen übrig, in denen mindestens eine Zelle einen Wert von> 199 hat.

Ich habe auch die gleiche Datendatei wie eine Textdatei. Daher dachte ich, dass der beste Ansatz darin bestehen könnte, die Linux-Befehlszeile für dieses Problem zu verwenden, anstatt die Excel-Datei zu verwenden (was angesichts der Anzahl der Zeilen und des Umfangs sperrig ist.) Säulen). Aber ich bin ein Anfänger bei Linux und Awk, also suchte ich nach allgemeinen Ratschlägen, wie ich an dieses Problem herangehen könnte. vielen Dank

Danke für deine Hilfe.

Beispielbild des Datensatzes unten. Hier würde ich nur die Zeilen wünschen, die Zellen hervorgehoben haben (weil diese> 200 sind), aber ich kann nicht einfach die Sortierfunktion verwenden oder wenn-Anweisungen kompliziert sein, weil mein Datensatz so viele Spalten enthält, dass dies zu zeitaufwändig ist ...

Linux-Befehlszeile für große Datenmenge?

0
Ich verstehe nicht Ist das eine Frage zu Excel? Haben Sie Ihre Daten aus Excel in eine Textdatei exportiert? Details bitte. Bitte antworten Sie nicht in Kommentaren. Bearbeiten Sie Ihre Frage, um sie klarer und vollständiger zu machen. Scott vor 5 Jahren 0
Anna hat ihren Fall klar beschrieben. Sie / er hat "dieselbe Datendatei wie eine Textdatei" und möchte um Rat fragen, wie Sie diese Textdatei in der Linux-Befehlszeile analysieren und welche Kombination von Werkzeugen dafür zu verwenden ist. Sollte das Piping mit mehreren Befehlen oder einem anderen Ansatz verwendet werden. Das interessiert mich auch. Vielen Dank für die Frage. titus vor 5 Jahren 0
@ titus: Ich würde erwarten, dass jemand, der seit acht Jahren auf der Website ist, etwas über Änderungen und die Änderungshistorie weiß. Wenn Sie nachsehen, werden Sie feststellen, dass die Anweisung "gleiche Datendatei als Textdatei" hinzugefügt wurde, nachdem ich meinen Kommentar abgegeben hatte. Scott vor 5 Jahren 1

2 Antworten auf die Frage

0
Elmo

Da sagten Sie "nach allgemeinen Ratschlägen für dieses Problem suchen?" Hier ist ein Ansatz:

Wenn Sie wissen, wie Python verwendet wird, können Sie die Datei als durch Kommas getrennte Datei speichern und durch die Datei laufen lassen, indem Sie einfach ein kleines Skript schreiben und dann csvetwas mit den Daten tun. Sie können jedes Betriebssystem verwenden, das Python unterstützt.

Ich lerne gerade Python, also habe ich noch kein Skript geschrieben. Welches Skript würde das tun? Anna vor 5 Jahren 0
Sie können beispielsweise das Modul "xlrd" verwenden, insbesondere die Methoden sheet.nrows und sheet.row_values ​​(n). Ein kleines Tutorial zur Verwendung von xlrd wird auf https://www.geeksforgeeks.org/reading-excel-file-using-python/ beschrieben. Christoph Sommer vor 5 Jahren 0
0
Scott

Ich habe nicht viel allgemeine Ratschläge. Insbesondere empfehle ich Ihnen, diesen awk-Befehl zu verwenden:

awk '{ over=0 for (i=1; i<=NF; i++) if ($i > 199) over=1 if (over) print }' 

Ich habe eine kleine Datendatei erstellt, die auf Zahlen aus Ihrer Datei basiert, und einige davon habe ich selbst zusammengestellt:

$ cat input 81 23 40 31 0 416 12 2 2 1 157 41 80 201 417 42 17  $ ./myscript input 31 0 416 12 157 41 80 201 417 42 17 

Um Zeilen aus Ihrer Datei zu löschen, tun Sie

$ ./myscript input > input.new $ mv input.new input 

Anmerkungen:

  • Sie sollten selbst entscheiden, ob Ihre Anforderung> 199,> 200, ≥ 200 oder was ist.
  • Wenn Sie Zeile 1 (dh Zeile 1, Kopfzeile) beibehalten möchten, sagen Sie dies.
  • Ich habe das nicht an einer großen Datei getestet.  awksollte keine Probleme mit einer großen Anzahl von Zeilen (Zeilen) haben. Tausend Spalten (Felder) könnten ein Thema sein, aber ich bezweifle es.