Linux
計算所有文件中兩個特定行中的字元並使用相應的文件名列印總和
情況如下:有多個 *.txt 文件,每個文件都包含以下行,其中
var
or的值不同lab
。例如:
abc.txt
:var^ABCDEFG lab^ABCDEFGH
def.txt
:var^ABCDEFGHI lab^ABCDEFGHIJ
我需要一個命令或腳本,它將為每個 .txt 文件列印 (
var^
或) 中的字元數總和。lab^
樣本輸出:abc.txt: Total Characters in (Var and Lab) are 15. (counting character after the caret ^ sign) def.txt: Total Characters in (Var and Lab) are 19.
將@steeldriver 的答案擴展到其他
awk
實現,而不會BEGINFILE
使它ENDFILE
有點混亂,但可移植:awk -F'^' 'FNR==1{if (NR>FNR) printf("%s : Total characters in (Var) and (Lab) are %d\n",lastfile,sum); sum=0; lastfile=FILENAME} \ NF==2 && ($1=="var" || $1=="lab") {sum+=length($2)} \ END{printf "%s: Total characters in (Var) and (Lab) are %d\n", FILENAME, sum}' abc.txt def.txt
解釋:
- 在文件的開頭(即
FNR
每文件行的計數器為 1),我們將文件名儲存在一個臨時變數中lastfile
,並將計數器變數設置為 0。- 如果這不是第一個文件(即
NR
全域行計數器大於FNR
),我們輸出前一個文件的統計資訊。- 由於此規則不會擷取
awk
的參數列表中的最後一個文件,因此我們還必須在全域END
塊中複製邏輯。