Verwenden von awk mit parallel

1399
kelorek

Ich habe etwa 3.000 Dateien, die jeweils 300 MB groß sind, und ich möchte sie mit meinem 16-Core-Server so schnell wie möglich nach einer Reihe von Teilzeichenfolgen durchsuchen.

Dies ist, was ich versucht habe, aber es scheint nicht, die Dateien zu durchsuchen.

sudo find /mnt2/preprocessed/preprocessed/mo* | sudo xargs awk '/substring/ END ' | paste -sd+ | bc 

Es ist aus verschiedenen Anleitungen zusammengefügt, ich verstehe es nicht ganz. Haben Sie Vorschläge, wie ich die Dateiverarbeitung aufteilen kann?

1
Sie sind wahrscheinlich E / A, nicht CPU-gebunden. Nicole Hamilton vor 11 Jahren 1
Es ist eine High-I / O-Instanz (hi1.4xlarge ec2), aber Sie haben wahrscheinlich recht. Ich möchte immer noch wissen, wie man GNU in diesem Zusammenhang parallel verwendet, aber ich konnte es nicht zum Laufen bringen. kelorek vor 11 Jahren 0

2 Antworten auf die Frage

1
Scott
  1. Prüfen Sie, ob Sie das parallelProgramm auf Ihrem System installiert haben. (Möglicherweise kommt es von GNU.) Wenn Sie dies tun, finden Sie heraus, wie Sie es verwenden. Andernfalls,
  2. Führen Sie Ihre findmit Ausgabe in eine Datei aus. headTeilen Sie diese Datei mithilfe eines Texteditors oder möglicherweise eines Skripts, das Tools wie verwendet, in 16 Fragmentdateien mit (ungefähr) gleicher Zeilenanzahl auf (dh referenziert dieselbe Anzahl gefundener Dateien). Starten Sie dann 16 awk … | paste … | bcPipelines. eine für jede Fragmentdatei. (Und fügen Sie die 16 Ergebnisse hinzu.)

Ich frage mich, warum Sie verwenden, awkum Vorkommen einer Zeichenfolge zu zählen, wenn dies grep -cspeziell dafür gedacht ist.

1
Thor

GNU parallel ist ziemlich kompatibel mit xargs, in Ihrem Fall kann es es ersetzen. Wenn Sie nur Vorkommen der substringVerwendung zählen, grep -cwie Scott empfiehlt:

sudo find /mnt2/preprocessed/preprocessed/mo* |  sudo parallel grep -c source | paste -sd+ | bc 

Beachten Sie, dass einige Versionen von GNU / Linux GNU parallel im kompatiblen Modus "Tollef's parallel" installieren. Sie können dies ändern, indem Sie --gnuden Befehlszeilenargumenten Parallel hinzufügen . Um die Änderung dauerhaft Add --gnuan ~/.parallel/config.

Grep entpuppt sich aus irgendeinem Grund als viel langsamer als awk, weshalb ich mit awk gegangen bin. kelorek vor 11 Jahren 0
Das hat für mich nicht funktioniert - es verarbeitet nichts, wenn ich nur parallel anstelle von xargs verwende. kelorek vor 11 Jahren 0
poste die Ausgabe von 'parallel --version' Ole Tange vor 11 Jahren 0
@kelorek: awk schneller als grep? welche Versionen von grep und awk verwenden Sie? In meinen Tests zählt das Vorkommen in einer 200M-Datei für "awk" 3,7 Sekunden, für "grep -c" 1,2 Sekunden und für "grep-Fc" 0,005 Sekunden. Thor vor 11 Jahren 0