Linux

計算所有文件中兩個特定行中的字元並使用相應的文件名列印總和

  • July 12, 2020

情況如下:有多個 *.txt 文件,每個文件都包含以下行,其中varor的值不同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塊中複製邏輯。

引用自:https://unix.stackexchange.com/questions/597152