我有一个模板文件,需要将多个文件中的数据插入此文件中。模板(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 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
我希望能够根据需要为尽可能多的数据文件执行此操作,并且无法弄清楚如何自动化它。
答案 0 :(得分:0)
这会......
while read -r line;
do
file=$(echo $line | sed 's/ //;s/$/.dat/');
echo $line;
if [ -f "$file" ]; then cat "$file"; fi;
done < template.txt
答案 1 :(得分:0)
您的帖子中遗漏了很多可能会影响此问题的详细信息,但考虑到您的要求,这似乎可行,假设每行都是删除了空格且缺少.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并附加.dat,然后替换空格并对cat该文件进行系统调用。
另一个例子:
$ 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
答案 2 :(得分:0)
$ 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