2017-04-19 92 views
2

我有被全部整理gzip压缩文件的目录。我不知道目录中有多少个文件。我想将这些文件合并到一个文件中。我已经绕了这样的: find . -type f | xargs zcat | sort 然而,当我加入-m标志,它只是串接的文件一个又一个。有没有办法使用sort -m合并目录中的所有排序文件?合并排序的文件不知道文件名

谢谢!

我想指出,@ chepner的解决方案完全适用于非压缩文件。

+0

的'sort'命令不能采取压缩文件作为输入。 –

+1

'sort -m'不排序;它*仅*合并其预先排序的输入文件。当您从标准输入读取时,您只有*一个*输入文件。在这种情况下,你根本不需要'-m'。 – chepner

+0

我想简单地合并这些文件,因为我知道它们都是已排序的,可能吗? –

回答

0

我已经找到了答案!

find . -type f | awk '{print "<(gzip -cd "$0")"}' | tr "\n" " " | (echo -n sort -m " "; cat -; echo) | bash

此查找目录中的所有文件,并将它们作为参数传递给sort命令,一路上空间替换换行符。感谢大家帮助我们到达这里!

3

要合并预排序的文件,你需要作为参数提供的名称,而不是数据作为标准输入。假设你没有许多文件,只是使用

sort -m * 
+2

虽然文件是'gzip'd。它可能需要构建或评估一些流程替代。 –

+0

是的,那是我问题的根源。 –

+0

您可以将两个gzip文件连接在一起,以制作一个更长的gzip文件。如果你实际上不需要*排序*,那么'cat log * .gz> bigfile.gz'就好了。 – ghoti