我在一个目录中有超过50000个文件,例如file1.txt,file2.txt,.....,file50000.txt。我想连接一些文件的文件号列在下面的文本文件(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 $1}' need.txt)
cat file$f1.txt >> out.txt
(( n1++ ))
done
答案 0 :(得分:3)
这可能对您有用:
sed 's/.*/file&.txt/' < need.txt | xargs cat > out.txt
答案 1 :(得分:2)
这样的事情对你有用:
sed -e 's/.*/file&.txt/' need.txt | xargs cat > out.txt
它使用sed将每一行翻译成相应的文件名,然后将文件名传递给xargs
,将其移至cat
。
使用awk可以这样做:
awk 'NR==FNR{ARGV[ARGC]="file"$1".txt"; ARGC++; next} {print}' need.txt > out.txt
将每个文件添加到要处理的ARGV
文件数组中,然后打印它看到的每一行。
答案 2 :(得分:2)
可以在没有任何sed或awk命令的情况下执行此操作。直接使用bash内置函数和cat(当然)。
for i in $(cat need.txt); do cat file${i}.txt >> out.txt; done
如你所愿,这很简单。