猫几千档

时间:2013-05-15 13:58:27

标签: linux bash shell

我在一个文件夹中有几个(60,000)文件需要合并为3个单独的文件。 如何捕获这个以便我可以让每个文件包含大约20,000个这些文件的内容?

我知道这就像一个循环:

for i in {1..20000}
do
cat file-$i > new_file_part_1
done

4 个答案:

答案 0 :(得分:5)

这样做的:

cat file-$i > new_file_part_1

每次循环迭代时都会截断new_file_part_1。您想要附加到文件:

cat file-$i >> new_file_part_1

答案 1 :(得分:4)

其他答案会在每次迭代时关闭并打开文件。我更喜欢

for i in {1..20000}
do
    cat file-$i
done > new_file_part_1

所以所有cat次运行的输出都会一次性传输到一个文件opend。

答案 2 :(得分:0)

假设哪个输入文件到哪个输出文件无关紧要:

for i in {1..60000} 
do 
  cat file$i >> out$(($i % 3))
done

此脚本使用模运算符%将输入分成3个bin;它将生成3个输出文件:

  • out0包含file3,file6,file9,...
  • out1包含file1,file4,file7,...
  • out2包含file2,file5,file8,...

答案 3 :(得分:0)

#!/bin/bash

cat file-{1..20000} > new_file_part_1

这只启动cat一次,只打开和关闭输出文件一次。不需要循环,因为cat可以接受所有20000个参数。

精明的观察者指出,在某些系统上,20000个参数可能会超出系统的ARG_MAX限制。在这种情况下,可以使用xargscat将被多次启动(但仍然远远少于20000次)。

echo file-{1..20000} | xargs cat > new_file_part_1

这是有效的,因为在Bash中,echo是一个内置的shell,因此不受ARG_MAX的约束。