连接特定数量的文件

时间:2018-11-19 12:25:47

标签: bash command cat

我有一堆名为uv_set_XXXXXXXX的文件,其中6个X代表常规格式的年,月和日。想象一下,我有325个此类文件。我想按50个文件的组进行连接,因此最终我有7个文件(6个文件,分别为50个和25个中的1个)。

我一直在考虑使用cat,但看不到从列表中选择多个文件的选项。我可以使用Python做到这一点,但是只是想知道是否某些Unix命令行实用程序可以更直接地做到这一点。

谢谢。

2 个答案:

答案 0 :(得分:3)

对于GNU并行,您可以使用以下命令

parallel -n50 "cat {} > out{#}" ::: uv_set_*

这会将前50个文件合并到out1中,接下来的50个文件合并到out2中,依此类推。

答案 1 :(得分:1)

我会分解并在Awk中执行此操作。

awk 'FNR==1 && (++i%50 == 0) {
    if(NR>1) close p;
    p = "dest_" ++j }
    { print >p }' uv_set_????????

这将创建文件dest_1dest_7,前6个文件中每个文件包含50个文件,最后一个文件中包含其余文件。

必须关闭前一个文件,因为系统仅允许Awk具有有限数量的打开文件句柄(尽管该限制通常高于7,因此在您的示例中可能并不重要)。


大声思考部门,只是为了防止其他人浪费时间重复这种死胡同。

您可以一次使用xargs -L 50 cat来串联50个文件,但是没有简单的方法为每次调用为标准输出传递新的重定向。您可以尝试通过类似

的方法来解决问题
# XXX Do not use: incomplete
printf '%s\n' uv_set_???????? |
xargs -L 50 sh -c 'cat "$@" > ... something' _

但是我无法提出一种优雅的方法来每次设置一个不同的something

相关问题