Hug*_*lpz 6 regex bash shell awk cjk
给定一个包含子文件夹的文件夹,其中包含多语言.txt文件,例如:
But where is Esope the holly Bastard
But where is ? ? ? ? ?
? ? ?
? ?
?
? ? ? ? ? ? ?
? ? ? ? ?
? ? ? ? ?
Run Code Online (Sandbox Code Playgroud)
我已经知道如何在一个文件中计算以空格分隔的字频.txt:
$ grep -o '\w*' myfile.txt | awk '{a[$1]++}END{for(k in a)print a[k],k}' | sort > myoutput.txt
Run Code Online (Sandbox Code Playgroud)
获得优雅:
1 ?
1 ?
1 Bastard
1 Esope
1 holly
1 the
1 ?
1 ?
1 ?
1 ?
2 ?
2 But
2 is
2 where
2 ?
2 ?
3 ?
4 ?
4 ?
5 ?
Run Code Online (Sandbox Code Playgroud)
如何更改代码以处理文件夹及其子文件夹中的多个文件,所有文件都呈现类似的模式(至少*.txt)?
您可以使用该find命令来实现此目的。像这样:
find -iname '*.txt' -exec cat {} \; | grep -o '\w*' | awk '{a[$1]++}END{for(k in a)print a[k],k}' | sort
Run Code Online (Sandbox Code Playgroud)
我正在使用该选项-exec来捕获当前目录及其子目录中的每个 *.txt 文件。输出将通过管道传输到 grep|awk|sort 管道。