Shell 目录中的大量选择性文件的串联

Concatenation of huge number of selective files from a directory in Shell

我在 file1.txt、file2.txt、.....、file50000.txt 等目录中有超过 50000 个文件。我想连接一些文件,其文件号列在以下文本文件 (need.txt) 中。

need.txt
1
4
35
45
71
.
.
.

我尝试了以下方法。虽然它是有效的,但我正在寻找更简单、更快捷的方法。

n1=1
n2=$(wc -l < need.txt)
while [ $n1 -le $n2 ]
do
f1=$(awk 'NR=="$n1" {print }' need.txt)
cat file$f1.txt >> out.txt
(( n1++ ))
done

像这样的东西应该适合你:

sed -e 's/.*/file&.txt/' need.txt | xargs cat > out.txt

它使用 sed 将每一行翻译成适当的文件名,然后将文件名交给 xargs 再交给 cat

使用 awk 可以这样做:

awk 'NR==FNR{ARGV[ARGC]="file"".txt"; ARGC++; next} {print}' need.txt > out.txt

将每个文件添加到 ARGV 文件数组中进行处理,然后打印它看到的每一行。

这可能也适合你:

sed 's/.*/file&.txt/' < need.txt | xargs cat > out.txt

无需任何 sed 或 awk 命令也可以做到这一点。直接使用 bash 内置函数和 cat(当然)。

for i in $(cat need.txt); do cat file${i}.txt >> out.txt; done

如你所愿,很简单