给定.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' Bastard@1
But@2
Esope@1
holly@1
is@2
the@1
where@2
注意:在这里使用cat是没有用的,我们只能使用
$tr ' ' '\n' 1 Bastard
2 But
1 Esope
1 holly
2 is
1 the
2 where
我们可以再次排序以sed删除前导空格:
$tr ' ' '\n' 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
标签:frequency-analysis,linux,shell,awk,word-frequency
来源: https://codeday.me/bug/20191013/1905844.html