find | parallel 'perl -lane '\'' print "$ARGV: $_" if $. == 1 and /searchStr/i '\'' {}'
Eine weitere Idee, die Dinge zu beschleunigen, besteht darin, verfügbare Kerne und Threads zum Laufen zu bringen. Dafür gibt es GNU parallel . Dieses Beispiel Sport perl
, aber es macht das gleiche wie awk
in 3.
oben. Hier ist eine Befehlsaufteilung:
find
Suchen Sie nach Dateien im aktuellen Verzeichnis und dessen Unterverzeichnissen. Sie können ein anderes Verzeichnis angeben, in suchen und ein Dateimuster oder Erweiterung filtern auf: find /cygdrive/c/Directory/To/Search -iname "*.txt"
.
|
"Pipe", dh die Ergebnisliste wird an den nächsten Befehl übergeben.
parallel
Führen Sie den nächsten Befehl parallel aus.
perl
Skriptsprache, die sich bei der Bearbeitung von Textdateien auszeichnet, ersetzen sed
oder ersetzen kann awk
.
-lane
nützliche Schalter für Perl-Einzeiler.
'\''
Apostroph entkommen, benötigt, da wir bereits einen Apostroph nach dem Öffnen geöffnet haben parallel
.
print "$ARGV: $_"
drucke den Dateinamen ( $ARGV
), einen Doppelpunkt, ein Leerzeichen und die vollständige Zeile ( $_
).
if
Führen Sie den vorherigen Befehl nur aus, wenn die folgenden Bedingungen erfüllt sind.
$. == 1
Zeilennummer ( $.
) ist gleich Eins ( 1
), dh wir betrachten die erste Zeile der Datei.
and
Die folgende Bedingung muss ebenfalls erfüllt sein.
/searchStr/i
Die zu untersuchende Zeile enthält den Text ohne Berücksichtigung der searchStr
Groß- und Kleinschreibung.
'\''
Ein anderer Apostroph markiert das Ende der perl
Anweisung.
{}
Dies wird durch parallel
jeden der weitergeleiteten Dateinamen ersetzt find
.
'
Ende der parallel
Anweisung.