2016-03-24 4 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から別の列に$ 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

可能な複製である[awkを使用して別の列に1つのファイルに列を置き換えますか?](http://stackoverflow.com/questions/7846476/replace-column-in-one-file-with-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を使用すると、一度に1つのファイル全体を扱うことができます。この場合、ファイルf2です。 NRFNRは両方とも、差分値がFNRの行番号を含んでいます。新しいファイルが読み取られると、NRがインクリメントし続けます。
  • 我々は、アレイを作成している、f2ファイルで作業している間は、値としてkeyと最初の列($1)として行番号(NR)を用いaと呼ばれます。 nextはアクションブロックの残りの部分をスキップできます。
  • f2ファイルが終了すると、f1ファイルで作業を開始します。 FNRは1から増え、NRは増えないため、NR==FNRの条件はfalseになりません。したがって、第11アクションブロック{$11=a[FNR]}だけが作業されます。
  • このブロックは、行番号を検索して2番目の列値を配列値に再割り当てします。
  • 1最後に行が印刷されます。真を返し、awk真の文では、行が出力されます。
  • 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

これはfile2のATOM列と列のみを与えますが、$ 11列を置き換えたいのですが、なぜ印刷オプションがありませんこのawkコマンド? –

+0

説明を追加しました。あなたが即興を望むかどうかを見ます – SriniV

関連する問題