我在一个文件夹中有几个(60,000)个文件,需要组合成 3 个单独的文件。我将如何解决这个问题,以便我可以让每个文件都包含这些文件中约 20,000 个的内容?
我知道这就像一个循环:
for i in {1..20000}
do
cat file-$i > new_file_part_1
done
正在做:
cat file-$i > new_file_part_1
new_file_part_1
每次循环迭代时都会截断。您要附加到文件:
cat file-$i >> new_file_part_1
其他答案在每次迭代时关闭并打开文件。我会比较喜欢
for i in {1..20000}
do
cat file-$i
done > new_file_part_1
因此所有cat
运行的输出都通过管道传输到一个文件中,该文件只打开一次。
假设哪个输入文件去哪个输出文件并不重要:
for i in {1..60000}
do
cat file$i >> out$(($i % 3))
done
该脚本使用模运算符%
将输入分为 3 个 bin;它将生成 3 个输出文件:
#!/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
.