Verwenden von awk mit parallel

Verwenden von awk mit parallel

Ich habe ca. 3000 Dateien mit je 300 MB und möchte diese mit meinem 16-Core-Server möglichst schnell nach einer Reihe von Teilstrings durchsuchen.

Das habe ich versucht, aber die Dateisuche scheint dadurch nicht parallelisiert zu werden.

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

Es ist aus verschiedenen Anleitungen zusammengeklatscht, ich verstehe es nicht ganz. Habt ihr Vorschläge, wie ich die Dateiverarbeitung aufteilen kann?

Antwort1

  1. Überprüfen Sie, ob Sie das parallelProgramm auf Ihrem System haben. (Es könnte von GNU stammen.) Wenn ja, finden Sie heraus, wie man es benutzt. Andernfalls
  2. Führen Sie Ihre findAusgabe in eine Datei aus. Teilen Sie diese Datei mithilfe eines Texteditors oder möglicherweise eines Skripts mit Tools wie headin 16 Fragmentdateien mit (ungefähr) gleicher Zeilenanzahl auf (d. h., sie verweisen auf die gleiche Anzahl gefundener Dateien). Starten Sie dann 16 awk … | paste … | bcPipelines; eine für jede Fragmentdatei. (Und fügen Sie die 16 Ergebnisse hinzu.)

awkIch frage mich, warum Sie es zum Zählen der Vorkommen einer Zeichenfolge verwenden , wenn grep -ces speziell dafür entwickelt wurde.

Antwort2

GNU parallel ist ziemlich kompatibel mit xargs, in Ihrem Fall kann es es ersetzen. Wenn Sie nur Vorkommen von substringuse grep -cals zählenScottschlägt vor:

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 „Tollefs parallel“ installieren. Sie können das ändern, indem Sie --gnuden Befehlszeilenargumenten parallel hinzufügen. Um die Änderung dauerhaft zu machen, fügen Sie --gnuzu hinzu ~/.parallel/config.

verwandte Informationen