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
如你所愿,很简单
我在 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
如你所愿,很简单