Linux
計算文件中每個 awk 輸出搜尋字元串
我會盡量具體和明確。
我有一個文件:
log.txt
它包含多個字元串,我搜尋它們以列印和計算每個字元串。這是我的命令,只列印文件中的列重合
log.txt
:sed -n '1p' log.txt | awk '{ s = ""; for(i = 25; i <= NF; i++) s = s $i "\n"; print s}'
解釋
sed -n '1p' //prints the first line awk '{ s = ""; for(i = 25; i <= NF; i++) s = s $i "\n"; print s}' //prints the next columns from the number 25 column
輸入:
Column25 Column26 Column27 ColumnN <--#first filter:I need obtain specific headers. ColumnN Column25 Column27 ColumnN Column26 Column27 <--#Count how many times is repeat every string in whole file
輸出:
Column25 Column26 Column27 Column28 Column29 ColumnN
我嘗試這樣做: 從上一個輸出中,我想計算同一文件
file.log
中但在同一命令中的所有巧合:sed -n '1p' log.txt | awk '{ s = ""; for(i = 25; i <= NF; i++) s = s $i "\n"; print s}'
並再次發送到輸出,如:
期望的輸出:
Column25 - n times Column26 - n times Column27 - n times Column28 - n times Column29 - n times ColumnN - n times
PS。我正在考慮在
"$s"
for 循環中使用相同的變數來開始搜尋,但不起作用。
這是我解決這個問題的方法:
awk '{n=1;if(NR==1)n=25;for(i=n;i<=NF;i++) a[$i]++} END{for(val in a) print val,a[val]}' input.txt
您想要在第一行中擷取欄位 25 及之後的事實要求我們檢查
NR
變數,並設置n
將在循環中使用的變數。至於a[$i]++
這將是一個關聯數組,其中欄位是鍵,數組中的值將通過運算符增加其計數++
。這是 awk 中非常典型的欄位計數方法。