2012-11-23 12 views
5

grundlegende Frage Awk, aber ich kann keine Antwort scheinen überall zu finden:awk wählen Sie Eingabedateien aus der Liste

Ich habe einen Ordner von 50000 txt-Dateien, aus denen Ich mag würde AWK sucht auf einer Untergruppe laufen . Ich habe die Dateinamen, auf die ich die Suche beschränken möchte, in einem separaten Dokument gespeichert. Dies würde erheblich die Suche beschleunigen, die im Moment wie folgt aussieht:

awk -F "searchTerm" '{print NF-1}' data/output/*>> output.txt 

Vielen Dank

Antwort

1

Angenommen, Ihre Datei, um die Teilmenge enthält, die Sie suchen möchten subset.txt genannt wird und dessen Inhalt hat dieses Format (jede Datei in einer separaten Zeile):

file1.txt 
file2.txt 
file3.txt 
... 
fileN.txt 

Dann wird dieser den Trick:

awk -F "searchTerm" '{print NF-1}' $(<subset.txt) >> output.txt 

Erläuterung:

  • $(<subset.txt) wird die Teilmenge Liste der Dateien zu awk als Eingabe liefern. (Siehe Jonathan Leffler Kommentar unten)

ich auch darauf hinweisen, dass -F "searchTerm" tatsächlich das Feldtrenneinstellung (Begrenzer von awk pro Zeile verwendet wird) zu searchTerm. Wenn Sie die Anzahl der Felder drucken möchten - 1 auf jeder Zeile, die „Suchbegriff“ enthält, zu tun:

awk '/searchTerm/ {print NF-1}' $(cat subset.txt) >> output.txt 
+1

Ausgezeichnet, Vielen Dank, ich wusste es einfach =) –

+0

sein mußte @RolfFredheim sehen aktualisiert Antwort =) –

+0

In 'bash', können Sie vermeiden, dass der' cat' Prozess mit '$ (

0

Ich denke, das wird für Sie arbeiten.

0

Wenn Sie Ihre Listen in einer Datei namens filelist.txt haben, können Sie einfach den Befehl stdout von einem Befehl cat verwenden.

awk -F "searchTerm" '{print NF-1}' `cat data/output/filelist.txt` >> output.txt` 
Verwandte Themen