我有两个文件(file1和file2)
file1:
-11.61
-11.27
-10.47
file2:
NAME
NAME
NAME
我想使用awk在文件2中搜索第一次出现的NAME,并在它之前添加第一行file1,依此类推。所需的输出是
########## Energy: -11.61
NAME
########## Energy: -11.27
NAME
########## Energy: -10.47
NAME
我试过这段代码
#!/bin/bash
file=file1
while IFS= read line
do
# echo line is stored in $line
echo $line
awk '/MOLECULE/{print "### Energy: "'$line'}1' file2` > output
done < "$file"
但这是我得到的输出
########## Energy: -10.47
NAME
########## Energy: -10.47
NAME
########## Energy: -10.47
NAME
我不知道为什么脚本在file2中每次出现NAME之前只放入file1的最后一个值。
感谢您的帮助!
很抱歉,如果我不清楚我的问题。以下是我的文件样本(energy.txt和sample.mol2):
[user] $ cat energy.txt
-11.61
-11.27
-10.47
[user] $ cat sample.mol2
@<TRIPOS>MOLECULE
methane
5 4 1 0 0
SMALL
NO_CHARGES
@<TRIPOS>ATOM
1 C 2.8930 -0.4135 -1.3529 C.3 1 <1> 0.0000
2 H1 3.9830 -0.4135 -1.3529 H 1 <1> 0.0000
3 H2 2.5297 0.3131 -0.6262 H 1 <1> 0.0000
4 H3 2.5297 -1.4062 -1.0869 H 1 <1> 0.0000
5 H4 2.5297 -0.1476 -2.3456 H 1 <1> 0.0000
@<TRIPOS>BOND
1 1 2 1
2 1 3 1
3 1 4 1
4 1 5 1
@<TRIPOS>MOLECULE
ammonia
4 3 1 0 0
SMALL
NO_CHARGES
@<TRIPOS>ATOM
1 N 8.6225 -3.5397 -1.3529 N.3 1 <1> 0.0000
2 H1 9.6325 -3.5397 -1.3529 H 1 <1> 0.0000
3 H2 8.2858 -2.8663 -0.6796 H 1 <1> 0.0000
4 H3 8.2858 -4.4595 -1.1065 H 1 <1> 0.0000
@<TRIPOS>BOND
1 1 2 1
2 1 3 1
3 1 4 1
@<TRIPOS>MOLECULE
water
3 2 1 0 0
SMALL
NO_CHARGES
@<TRIPOS>ATOM
1 O 7.1376 3.8455 -3.4206 O.3 1 <1> 0.0000
2 H1 8.0976 3.8455 -3.4206 H 1 <1> 0.0000
3 H2 6.8473 4.4926 -2.7736 H 1 <1> 0.0000
@<TRIPOS>BOND
1 1 2 1
2 1 3 1
这是我需要的输出
########## Energy: -11.61
@<TRIPOS>MOLECULE
methane
5 4 1 0 0
SMALL
NO_CHARGES
@<TRIPOS>ATOM
1 C 2.8930 -0.4135 -1.3529 C.3 1 <1> 0.0000
2 H1 3.9830 -0.4135 -1.3529 H 1 <1> 0.0000
3 H2 2.5297 0.3131 -0.6262 H 1 <1> 0.0000
4 H3 2.5297 -1.4062 -1.0869 H 1 <1> 0.0000
5 H4 2.5297 -0.1476 -2.3456 H 1 <1> 0.0000
@<TRIPOS>BOND
1 1 2 1
2 1 3 1
3 1 4 1
4 1 5 1
########## Energy: -11.27
@<TRIPOS>MOLECULE
ammonia
4 3 1 0 0
SMALL
NO_CHARGES
@<TRIPOS>ATOM
1 N 8.6225 -3.5397 -1.3529 N.3 1 <1> 0.0000
2 H1 9.6325 -3.5397 -1.3529 H 1 <1> 0.0000
3 H2 8.2858 -2.8663 -0.6796 H 1 <1> 0.0000
4 H3 8.2858 -4.4595 -1.1065 H 1 <1> 0.0000
@<TRIPOS>BOND
1 1 2 1
2 1 3 1
3 1 4 1
########## Energy: -10.47
@<TRIPOS>MOLECULE
water
3 2 1 0 0
SMALL
NO_CHARGES
@<TRIPOS>ATOM
1 O 7.1376 3.8455 -3.4206 O.3 1 <1> 0.0000
2 H1 8.0976 3.8455 -3.4206 H 1 <1> 0.0000
3 H2 6.8473 4.4926 -2.7736 H 1 <1> 0.0000
@<TRIPOS>BOND
1 1 2 1
2 1 3 1
答案 0 :(得分:3)
paste -d "\n" <(sed 's/^/########## Energy: /' file1) file2
########## Energy: -11.61
NAME
########## Energy: -11.27
NAME
########## Energy: -10.47
NAME
或者,坚持使用awk
awk '{
print "########## Energy: " $0
getline < "file2"
print
}' file1
答案 1 :(得分:0)
使用awk:
awk 'NR==FNR{a[NR]=$0;next} /@<TRIPOS>MOLECULE/
{print "########## Energy: ", a[++i]}1' energy.txt sample.mol2
说明:
NR==FNR{a[NR]=$0;next}
适用于第一个energy.txt
1,2,3...
且值为$0
的数组/@<TRIPOS>MOLECULE/
搜索在第二个文件sample.mol2
++i
将计数器移动到打印后的数组中的下一个元素