我在一个文件夹中有几个(60,000)文件需要合并为3个单独的文件。 如何捕获这个以便我可以让每个文件包含大约20,000个这些文件的内容?
我知道这就像一个循环:
for i in {1..20000}
do
cat file-$i > new_file_part_1
done
答案 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个输出文件:
答案 3 :(得分:0)
#!/bin/bash
cat file-{1..20000} > new_file_part_1
这只启动cat
一次,只打开和关闭输出文件一次。不需要循环,因为cat
可以接受所有20000个参数。
精明的观察者指出,在某些系统上,20000个参数可能会超出系统的ARG_MAX
限制。在这种情况下,可以使用xargs
,cat
将被多次启动(但仍然远远少于20000次)。
echo file-{1..20000} | xargs cat > new_file_part_1
这是有效的,因为在Bash中,echo
是一个内置的shell,因此不受ARG_MAX
的约束。