我的文件1如下,
ATOM 48 O ILE A 6 7.686 11.253 -7.457 1.00 27.81 O
ATOM 49 CB ILE A 6 6.898 13.596 -9.634 1.00 26.66 C
ATOM 50 CG1 ILE A 6 8.370 13.338 -9.831 1.00 24.73 C
ATOM 51 CG2 ILE A 6 6.637 15.204 -9.788 1.00 26.32 C
ATOM 52 CD1 ILE A 6 8.976 13.780 -11.270 1.00 32.46 C
现在,我想用file2中的另一列替换$ 11列,以获得如下输出,
ATOM 48 O ILE A 6 7.686 11.253 -7.457 1.00 -28.81 O
ATOM 49 CB ILE A 6 6.898 13.596 -9.634 1.00 30.66 C
ATOM 50 CG1 ILE A 6 8.370 13.338 -9.831 1.00 -56.73 C
ATOM 51 CG2 ILE A 6 6.637 15.204 -9.788 1.00 46.32 C
ATOM 52 CD1 ILE A 6 8.976 13.780 -11.270 1.00 4.46 C
file2如下,
-28.81
30.66
-56.73
46.32
4.46
我试图写这个代码工作正常但格式化已经改变。
for i in {1..798}
do
paste -d, <(awk -F' ' 'NR == '$i' {print $1 " " $2 " " $3 " " $4 " " $5 " " $6 " " $7 " " $8 " " $9 " " $10 }' 1IV7_bfac_try.pdb) <(awk -F' ' ' NR == '$i' {print $0}' colm_awk) <(awk -F' ' 'NR == '$i' {print $12}' 1IV7_bfac_try.pdb) >> new
done
任何有关awk或其他内容的帮助都会有用,谢谢。
答案 0 :(得分:1)
awk
救援!
awk 'NR==FNR{c11[NR]=$1; next} {$11=c11[FNR]}1' file2 file1
答案 1 :(得分:1)
如上所述here
<强>输入强>
::::::::::::::
f1
::::::::::::::
ATOM 48 O ILE A 6 7.686 11.253 -7.457 1.00 27.81 O
ATOM 49 CB ILE A 6 6.898 13.596 -9.634 1.00 26.66 C
ATOM 50 CG1 ILE A 6 8.370 13.338 -9.831 1.00 24.73 C
ATOM 51 CG2 ILE A 6 6.637 15.204 -9.788 1.00 26.32 C
ATOM 52 CD1 ILE A 6 8.976 13.780 -11.270 1.00 32.46 C
::::::::::::::
f2
::::::::::::::
-28.81
30.66
-56.73
46.32
4.46
<强>输出强>
awk 'FNR==NR{a[NR]=$1;next}{$11=a[FNR]}1' f2 f1
ATOM 48 O ILE A 6 7.686 11.253 -7.457 1.00 -28.81 O
ATOM 49 CB ILE A 6 6.898 13.596 -9.634 1.00 30.66 C
ATOM 50 CG1 ILE A 6 8.370 13.338 -9.831 1.00 -56.73 C
ATOM 51 CG2 ILE A 6 6.637 15.204 -9.788 1.00 46.32 C
ATOM 52 CD1 ILE A 6 8.976 13.780 -11.270 1.00 4.46 C
<强>解释强>
FNR==NR
允许您一次处理一个完整的文件。在这种情况下,它是文件f2
。 NR
和FNR
都包含行号,当读取新文件时,FNR
的差异将重置为1,NR
继续递增。 f2
文件时,我们正在创建一个名为a
的数组,使用行号(NR
)作为key
和第一列({{1 }}作为值。 $1
允许我们跳过动作块的其余部分。 next
文件结束后,我们开始处理f2
文件。 f1
条件不会变为错误,因为NR==FNR
将从1开始递增,而FNR
则不会。因此,只有第11个动作块NR
将被处理。 {$11=a[FNR]}
打印出该行。它返回true,并且在1
真实语句中导致行的打印。 awk
是定义文件的顺序。由于我们想要从文件f2 f1
创建一个数组,我们先把它放在第一位。 关于格式化,另一个有趣的例子是here
f2