Linux-Awk:来自一个文本文件的单词频率,如何输出到myFile.txt?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux-Awk:来自一个文本文件的单词频率,如何输出到myFile.txt?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1405字,纯文字阅读大概需要3分钟。
内容图文
![Linux-Awk:来自一个文本文件的单词频率,如何输出到myFile.txt?](/upload/InfoBanner/zyjiaocheng/950/0309aa87f71748e8a8af4732072915f2.jpg)
给定.txt文件,这些文件之间用空格分隔,例如:
But where is Esope the holly Bastard
But where is
和Awk函数:
cat /pathway/to/your/file.txt | tr ' ' '\n' | sort | uniq -c | awk '{print $2"@"$1}'
我在控制台中得到以下输出:
1 Bastard
1 Esope
1 holly
1 the
2 But
2 is
2 where
如何进入打印到myFile.txt中?
我实际上有300.000行,近200万个单词.最好将结果输出到文件中.
编辑:使用的答案(通过@Sudo_O):
$awk '{a[$1]++}END{for(k in a)print a[k],k}' RS=" |\n" myfile.txt | sort > myfileout.txt
解决方法:
您的管道效率不是很高,您应该用awk来完成整个工作:
awk '{a[$1]++}END{for(k in a)print a[k],k}' RS=" |\n" file > myfile
如果要按排序顺序输出:
awk '{a[$1]++}END{for(k in a)print a[k],k}' RS=" |\n" file | sort > myfile
管道给出的实际输出为:
$tr ' ' '\n' < file | sort | uniq -c | awk '{print $2"@"$1}'
Bastard@1
But@2
Esope@1
holly@1
is@2
the@1
where@2
注意:在这里使用cat是没有用的,我们只能使用<重定向输入. awk脚本也没有意义,它只是反转单词和单词频率的顺序,并用@分隔它们.如果我们删除awk脚本,则输出将更接近所需的输出(但是请注意前面的间距,并且未排序):
$tr ' ' '\n' < file | sort | uniq -c
1 Bastard
2 But
1 Esope
1 holly
2 is
1 the
2 where
我们可以再次排序以sed删除前导空格:
$tr ' ' '\n' < file | sort | uniq -c | sort | sed 's/^\s*//'
1 Bastard
1 Esope
1 holly
1 the
2 But
2 is
2 where
但是就像我在一开始提到的那样,让awk处理它:
$awk '{a[$1]++}END{for(k in a)print a[k],k}' RS=" |\n" file | sort
1 Bastard
1 Esope
1 holly
1 the
2 But
2 is
2 where
内容总结
以上是互联网集市为您收集整理的Linux-Awk:来自一个文本文件的单词频率,如何输出到myFile.txt?全部内容,希望文章能够帮你解决Linux-Awk:来自一个文本文件的单词频率,如何输出到myFile.txt?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。