Shell
在 awk 中使用 shell 變數並使用 for/while 循環
如何通過在
awk
使用for
/while
循環中傳遞shell變數來循環並實現以下目標?我有一個如下所示的文本文件。
mark 10 20 30 lawrence 40 22 60 mark 11 12 13 mike 15 16 17 lawrence 21 22 23 mike 31 32 33 mike 41 42 47
我希望輸出如下所示(第二列表示每個名稱的出現次數)
我還有一個要求很抱歉再次詢問輸出就像
如果標記的值為 20(在第三列中),它的出現應在下一列中列印
如果 mike 的值為 32(在第三列中),它的出現應列印在下一列
如果勞倫斯的值為 22(在第三列),它的出現應該列印在下一列
標記 2 1
邁克 3 1
勞倫斯 2 2
這就是它的樣子。我希望按如下方式傳遞文本文件。你能幫忙嗎?
我現在使用的命令
n=$(date +"%Y%m%d"); LogDataN=`tail -10 "$n".txt` -- my text file which contains the above data A=`echo "$LogDataN" | awk '{ c["$1"]++ } END { for (name in c) print name, c[name] }' ` echo "$A"
我不太明白你為什麼要將任何 shell 變數傳遞給
awk
這裡。tail "$(date +'%Y%m%d.txt')" | awk '{ c[$1]++ } END { for (name in c) print name, c[name] }'
tail
預設情況下從給定文件中提取最後 10 行文本,因此不需要-n 10
(或不推薦使用的)。-10
該date
命令用於創建要讀取的文件名。該
awk
程式碼使用第一列作為關聯數組中的鍵c
,其中包含每個名稱被看到的次數。對於從文件中讀取的每一行,名稱的計數都會增加。最後,輸出名稱和相關計數。請注意,這裡沒有使用 shell 變數。