到目前为止,这是我的代码:
awk '{++a[length()]} END{for (i in a) print i, a[i]}' <$1 | sort -n
它从文本文件中读取行的长度,并输出行的长度,然后输出有多少行具有相同的长度。
所以输入:
hello
guys
hows
it
going
将输出:
2 1
4 2
5 2
我希望它也能够有标准输入,这样我就能够运行命令“./script filename.txt”,并且还能够使用标准输入运行命令。
有什么办法可以通过 while 循环来完成此操作吗?我尝试过做类似的事情:
while read line
do
awk '{++a[length()]} END{for (i in a) print i, a[i]}' <${1:-/dev/stdin} | sort -n
done <${1:-/dev/stdin}
但似乎没有什么能正常工作......
有任何想法吗?
您可以使用破折号(-
) 作为文件名,awk 将其理解为使用 stdin 作为要解析的文件。例如:
awk '{++a[length()]} END{for (i in a) print i, a[i]}' -
另外,通过根本不指定文件名,awk 还使用 stdin
awk '{++a[length()]} END{for (i in a) print i, a[i]}'
请注意,您可以将两者混合使用。以下命令将按顺序处理 file1.txt、stdin 和 file2.txt:
awk '{++a[length()]} END{for (i in a) print i, a[i]}' file1.txt - file2.txt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)