2012-11-23 3 views
5

podstawowe pytanie AWK, ale nie wydaje się znaleźć odpowiedź w dowolnym miejscu:awk wybierz pliki wejściowe z listy

Mam folder z plikami txt 50000, z której chciałbym uruchomić AWK wyszukuje na podzbiorze . Zapisałem nazwy plików, dla których chcę ograniczyć wyszukiwanie, w osobnym dokumencie. Byłoby znacznie przyspieszyć wyszukiwanie, które w tej chwili wygląda tak:

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

Dziękujemy

Odpowiedz

1

Załóżmy, że plik zawierający podzbiór, który chcesz wyszukać nazywa subset.txt a jego treść ma ten format (każdy plik w osobnej linii):

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

Wtedy będzie to rade:

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

Objaśnienie:

  • $(<subset.txt) dostarczy listę podzbiór plików awk jako wejście. (Patrz komentarz Jonathana Lefflera poniżej)

I należy również podkreślić, że -F "searchTerm" faktycznie ustawienie pola rozdzielających (ogranicznik używany przez awk na każdej linii) do searchTerm. Jeśli chcesz wydrukować liczbę pól - 1 w każdym wierszu zawierającym "searchTerm", wykonaj:

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

Excellent, dzięki tak dużo, wiedziałem, że to musi być proste =) –

+0

@RolfFredheim zobaczyć zaktualizowaną odpowiedź =) –

+0

W 'bash' można uniknąć procesu cat' z' '$ (

0

Myślę, że to zadziała.

awk '/searchTerm/{print $(NF-1)}' data/output/*>> output.txt 
0

jeśli masz swoje listy w pliku o nazwie filelist.txt, możesz po prostu użyć standardowego polecenia z komendy cat.

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