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

时间:2015-07-21 12:22:09

标签: linux shell unix awk cat

我在一个目录中有超过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

3 个答案:

答案 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

如你所愿,这很简单。