如何以递归方式执行具有多个管道的猫

时间:2016-05-13 19:59:46

标签: awk find cat

我有一些看起来像这样的目录和文件:

/my/directories/directory0/ | -->File1.txt | -->File2.txt /my/directories/directory1/ | -->File1.txt | -->File2.txt /my/directories/directory2/ | -->File1.txt | -->File2.txt /my/directories/directory3/ | -->File1.txt | -->File2.txt

这些是CSV文件,我试图计算第3列,并从最高到最低排序。

现在我能够完成此任务,但仅限于每个目录x中。例如,如果我运行它:

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

然后我得到我想要的,但只有该目录中的数据。我想把所有/ my / directories / sub目录中的所有东西都放到一个文件中。

我已尝试使用lsfind来完成此操作,但我无法使其正常运行。我知道你可以递归地用这种方式捕捉,类似于:

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

但是,我还没有能够通过多管道命令来实现这一点。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

尝试使用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
----

答案 1 :(得分:1)

...
})(typeof exports !== 'undefined' ? module.exports = require('dust-full') : dust);