2016-03-24 53 views
0

我已经file1中如下,用另一个文件中的列替换一个文件中的列?

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 

现在,我想从文件2与另一列取代$ 9色谱柱,得到如下输出,

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 

文件2如下所示,

-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或awk的任何帮助将是有用的,谢谢。

+0

的可能的复制[使用AWK从另一个在一个文件中与列替换列?](http://stackoverflow.com/questions/7846476/replace-column-in-one-file-with-column-from-another-using-awk) –

回答

1

awk来救援!

awk 'NR==FNR{c11[NR]=$1; next} {$11=c11[FNR]}1' file2 file1 
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允许您一次处理一个完整的文件。在这种情况下,它是文件f2NRFNR都包含行号,其差值为FNR当读取新文件时被重置为1,其中NR继续递增。
  • 虽然我们用f2文件工作,我们创建使用行数(NR)作为key和第一列($1)作为值称为a阵列。 next允许我们跳过动作块的其余部分。
  • 一旦f2文件结束,我们开始在f1文件上工作。 NR==FNR条件不会变为false,因为FNR会从1递增,而NR不会。所以只有第十一个行动块{$11=a[FNR]}将被处理。
  • 该块所做的是通过查找行号来重新将第二列值赋值给数组值。
  • 1在最后打印行。它返回true,并在awk true语句导致打印该行。
  • f2 f1是定义的文件的顺序。由于我们想从文件f2创建一个数组,我们首先将其放入。

在格式化,另一个有趣的例子是here

gawk ' 
NR==FNR { f1[NR]=$0; next } 
{ 
    split(f1[FNR],flds,FS,seps) 
    flds[11]=$1 
    for (i=1;i in flds;i++) 
     printf "%s%s", flds[i], seps[i] 
    print "" 
} 
' f1 f2 
+0

这只给出ATOM列和file2的列,但我只想替换$ 11列,为什么没有打印选项这个awk命令? –

+0

补充说明。看看你是否想要即兴创作 – SriniV

相关问题