Bash
模式之間的 sed 計數行 - 多個文件
我
.txt
在一個目錄中有多個文件。每個文件都有一個部分:DONE item 1 item 2 item 3 DONE
我想分別計算
DONE
每個文件的兩個標記之間的行數。我用這個問題來創建這個:
sed -n "/DONE/,/DONE/ p" *.txt | wc -l > ~/word_count.txt
但這會將每個文件的計數合併為一個數字。相反,我想要這樣的輸出:
file1.txt 3 file2.txt 5 file3.txt 6
更好地使用
awk
來計數。awk ' FNR == 1 {inside = 0} $0 == "DONE" { if (inside) print FILENAME, n n = 0 inside = ! inside next } inside {n++}' ./*.txt
這將為
DONE...DONE
每個文件中的每個部分列印一條記錄,這意味著如果沒有這樣的部分,則不會列印任何內容。要列印這些,0
您需要 GNU 實現awk
及其特殊語句:BEGINFILE``ENDFILE
awk ' BEGINFILE {DONE_count = 0} $0 == "DONE" { if (++DONE_count % 2 == 0) print FILENAME, n n = 0 next } DONE_count % 2 {n++} ENDFILE {if (!DONE_count) print FILENAME, 0}' ./*.txt
或者
awk
每個文件執行一個:for file in ./*.txt; do awk ' $0 == "DONE" { if (++DONE_count % 2 == 0) print FILENAME, n n = 0 next } DONE_count % 2 {n++} END {if (!DONE_count) print FILENAME, 0}' "$file" done