在 awk 中使用 shell 变量并使用 for/while 循环

在 awk 中使用 shell 变量并使用 for/while 循环

如何通过在awkusing 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(在第三列中),则其出现情况应打印在下一列中

如果 lawrence 的值为 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"

答案1

我不太明白为什么您想要将任何 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 变量。

相关内容