Linux

計算文件中每個 awk 輸出搜尋字元串

  • August 9, 2018

我會盡量具體和明確。

我有一個文件: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 中非常典型的欄位計數方法。

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