Awk 如何使用多个管道递归执行cat

Awk 如何使用多个管道递归执行cat,awk,find,cat,Awk,Find,Cat,我有一些目录和文件,如下所示: /my/directories/directory0/ | -->File1.txt | -->File2.txt /我的/目录/目录1/ | -->File1.txt | -->File2.txt /我的/目录/目录2/ | -->File1.txt | -->File2.txt /我的/目录/目录3/ | -->File1.txt | -->File2.txt 这些是CSV文件,我正在尝试计算第三列,并从最高到最低排序 现在我能够做到这一点,但只能在每个dir

我有一些目录和文件,如下所示:

/my/directories/directory0/
|
-->File1.txt
|
-->File2.txt
/我的/目录/目录1/
|
-->File1.txt
|
-->File2.txt
/我的/目录/目录2/
|
-->File1.txt
|
-->File2.txt
/我的/目录/目录3/
|
-->File1.txt
|
-->File2.txt

这些是CSV文件,我正在尝试计算第三列,并从最高到最低排序

现在我能够做到这一点,但只能在每个directoryx中实现。例如,如果我运行以下命令:

cd/my/directories/directory0/
cat*.txt | awk-F“,“{print$3}”sort | uniq-c | sort-nr>finalOutput.txt

然后我得到了我想要的,但只有在该目录中的数据。我想将所有/my/目录/子目录中的所有内容压缩到一个文件中

我曾尝试使用
ls
find
来完成此任务,但无法使其正常工作。我知道你可以这样递归地进行cat,类似于:

find/my/directories/-name'*.txt'-exec cat{}\;>finalOutput.txt

但是,我还不能用多管道命令来实现这一点。感谢您的帮助。

尝试使用xargs:

$ find . -name "f?" | xargs awk -F, '{ print $3 }' | sort | uniq -c | sort -nr
4 3
1 z
1 three
1 c
1 5

$ find . -name "f?" -exec echo "File: " {} \; -exec cat {} \; -exec echo "----" \;
File:  ./d0/f1
1,2,3
----
File:  ./d0/f2
3,4,5
----
File:  ./d1/f1
8,9,3
----
File:  ./d1/f2
a,b,c
----
File:  ./d2/f1
x,y,z
----
File:  ./d2/f2
one,two,three
----
File:  ./d3/f1
red,yellow,3
----
File:  ./d3/f2
1,2,3
----
尝试使用xargs:

$ find . -name "f?" | xargs awk -F, '{ print $3 }' | sort | uniq -c | sort -nr
4 3
1 z
1 three
1 c
1 5

$ find . -name "f?" -exec echo "File: " {} \; -exec cat {} \; -exec echo "----" \;
File:  ./d0/f1
1,2,3
----
File:  ./d0/f2
3,4,5
----
File:  ./d1/f1
8,9,3
----
File:  ./d1/f2
a,b,c
----
File:  ./d2/f1
x,y,z
----
File:  ./d2/f2
one,two,three
----
File:  ./d3/f1
red,yellow,3
----
File:  ./d3/f2
1,2,3
----

find/my/directories/-name'*.txt'-exec cat{}\|有什么问题啊…
?这没什么错。我只是不知道-exec标志后的正确语法。这是一个有效的答案,因为它显示了我语法中的错误啊…?这没什么错。我只是不知道-exec标志后的正确语法。这是一个有效的答案,因为它显示了我的语法中的错误。这只返回一列,并且不进行计数。@trueCamelType好的,您的示例也不这样做,您说“那么我就得到了我想要的”。所以,基本上,我不理解您想要实现什么,因为我的示例中使用了uniq命令,它确实返回了不止一列。它还计算了我现在理解的类型的出现次数。使用
find
查找所有相关文件,而不考虑目录深度,并使用
cut
而不是
awk
选择单个列。然后,继续原来的操作。这只返回一列,不会进行计数。@trueCamelType很好,您的示例也不会,关于这个示例,您说“那么我就得到了我想要的”。所以,基本上,我不理解您想要实现什么,因为我的示例中使用了uniq命令,它确实返回了不止一列。它还计算了我现在理解的类型的出现次数。使用
find
查找所有相关文件,而不考虑目录深度,并使用
cut
而不是
awk
选择单个列。然后,继续你原来做的事情。这很有效。我还想向任何找到这个答案的人指出,威廉·珀塞尔(William Pursell)对我最初问题的评论也解决了这个问题,但通过修正我最初的尝试,这是有效的。我还想向任何找到这个答案的人指出,威廉·珀塞尔(William Pursell)对我最初问题的评论也解决了问题,但通过修正我最初的尝试。