awk:如何处理文件夹和子文件夹中的多个files.txt?

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)?

hek*_*mgl 4

您可以使用该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 管道。

  • 要排除隐藏文件(名称以点“.”开头的文件),您可以优化查找模式。像这样: `-iname '[^\.].*.txt'` (3认同)