Linux 将多个文件插入到模板中
我有一个模板文件,需要将多个文件中的数据插入该文件。模板(template.txt)的布局如下:Linux 将多个文件插入到模板中,linux,awk,sed,data-manipulation,Linux,Awk,Sed,Data Manipulation,我有一个模板文件,需要将多个文件中的数据插入该文件。模板(template.txt)的布局如下: Title Data 1 Data 2 Data 3 我需要把每个数据集放在它的标题下。因此,假设数据文件是: Data1.dat Data2.dat Data3.dat 1 2 3 0 0 0 500 300 100 4 5 6 0 0 0 400 200 000 最终产品需要: Title Data
Title
Data 1
Data 2
Data 3
我需要把每个数据集放在它的标题下。因此,假设数据文件是:
Data1.dat Data2.dat Data3.dat
1 2 3 0 0 0 500 300 100
4 5 6 0 0 0 400 200 000
最终产品需要:
Title
Data 1
1 2 3
4 5 6
Data 2
0 0 0
0 0 0
Data 3
500 300 100
400 200 000
我怎样才能做到这一点?我可以使用以下方法将一个数据集插入模板:
sed '/Data 1/r Data1.dat' template.txt
我希望能够根据需要对尽可能多的数据文件执行此操作,但我不知道如何实现自动化。这样就可以了
while read -r line;
do
file=$(echo $line | sed 's/ //;s/$/.dat/');
echo $line;
if [ -f "$file" ]; then cat "$file"; fi;
done < template.txt
读取-r行时;
做
文件=$(echo$行| sed's///;s/$/.dat/);
回声线;
如果[-f“$file”];然后是cat“$file”;fi;
完成
您的帖子中有很多细节可能会影响这一点,但根据您的要求,假设每一行都是确切的文件名,并且删除了空格,缺少.dat扩展名,并且所有文件都存在,这似乎是可行的
$ cat template.txt
Title
Data 1
Data 2
Data 3
$ awk 'NR==1{print;next;}{print;filename=$0;gsub(" ","",filename);system("cat "filename".dat");}' template.txt
Title
Data 1
1 2 3
4 5 6
Data 2
0 0 0
0 0 0
Data 3
500 300 100
400 200 000
NR==1{print;next;}
发出第一行,然后转到下一行
{print;filename=$0.dat;gsub(“,”,filename);system(“cat”filename”);}
对于所有其他行,打印该行,将其分配给var和append.dat,然后替换空格并对该文件进行系统调用
另一个例子:
$ awk 'NR==1{print;next;}{print;filename=$0".dat";gsub(" ","",filename);system("cat "filename);}' template.txt
Title
Data 1
1 2 3
4 5 6
Data 2
0 0 0
0 0 0
Data 3
500 300 100
400 200 000
Data 4
4-1 4-2 4-3
4-1 4-2 4-3
4-1 4-2 4-3
Data 5
5-1 5-2 5-3
5-1 5-2 5-3
5-1 5-2 5-3
Data 6
6-1 6-2 6-3
6-1 6-2 6-3
6-1 6-2 6-3
Data 7
7-1 7-2 7-3
7-1 7-2 7-3
7-1 7-2 7-3
sed-e'/Data 1/r Data1.dat'-e'/Data 2/r Data2.dat'-e'Data 3/r Data3.dat'
?
$ cat tst.awk
NR==FNR {
if ( FNR==1 ) {
print
}
else {
filename = $0 ".dat"
gsub(/[[:space:]]/,"",filename)
title[filename] = $0
ARGV[ARGC] = filename
ARGC++
}
next
}
FNR==1 { print title[FILENAME] }
{ print }
$ awk -f tst.awk template.txt
Title
Data 1
1 2 3
4 5 6
Data 2
0 0 0
0 0 0
Data 3
500 300 100
400 200 000