Shell

在 awk 中使用 shell 變數並使用 for/while 循環

  • May 9, 2020

如何通過在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(或不推薦使用的)。-10date命令用於創建要讀取的文件名。

awk程式碼使用第一列作為關聯數組中的鍵c,其中包含每個名稱被看到的次數。對於從文件中讀取的每一行,名稱的計數都會增加。最後,輸出名稱和相關計數。

請注意,這裡沒有使用 shell 變數。

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