2017-12-01 11 views
1

文字列の先頭をH、C、O、N、Sで検索し、14,15,16列の値を他のファイル名frac(行単位)の値。私はawkコマンドに従って1行のスクリプトを作成しようとしましたが、うまくいきません。どんな助けでも大歓迎です。 、私は0.29035 0.05915 -0.06369でcoulmn 14、15と16の値を変更したい最初の行は文字Cで始まるため:例えば、次のように同じよう文字列で開始文字列を検索し、そのn番目の列値を別のファイル値に置き換えます。

awk -v c="`cat frac`" 'BEGIN {n=split(c,frac," "); ifrac=0} { printf("%s",$0); if ($1=="^H|^C|^O|^N|^S"){printf ("%2.5f %2.5f %2.5f", frac[++ifrac], $14, $15, $16); for (i=3;i<=NF;i++) {printf("%6d.",$i);}} printf ("\n")}' file 

私は変更したいファイルを探しますfracファイルから。ここ

C(5HFE ) 1 2 3304 3122 3124  1 3 28 4 1 99 0.28098 0.04363 0.00841 1.0000 
    0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
    3.9170 0.0000 0.0560 0.0000 0.0000 -0.1800 0.0000 0.0000 -0.0290 0.0000 
    0.0000 0.0300 0.0000 0.0000 0.0000 -0.2640 0.0000 0.0200 0.0000 0.0000 
-0.0190 0.0000 0.0000 0.0000 0.0000 0.0000 
H(5HFF ) 3 2 3122 3123 3124  1 2 24 4 1 95 0.27093 0.03969 0.00791 1.0000 
    0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
    1.0440 0.0000 0.0000 0.0000 0.1820 0.0860 0.0000 0.0000 0.0000 0.0000 
    0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 
    0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 
C(5HFG ) 1 2 3304 3124 3122  1 3 28 4 1 99 0.28246 0.05703 0.01056 1.0000 
    0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
    3.9170 0.0000 0.0560 0.0000 0.0000 -0.1800 0.0000 0.0000 -0.0290 0.0000 
    0.0000 0.0300 0.0000 0.0000 0.0000 -0.2640 0.0000 0.0200 0.0000 0.0000 
-0.0190 0.0000 0.0000 0.0000 0.0000 0.0000 
H(5HFH ) 3 2 3124 3125 3122  1 2 24 4 1 95 0.27416 0.06383 0.01183 1.0000 
    0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
    1.0440 0.0000 0.0000 0.0000 0.1820 0.0860 0.0000 0.0000 0.0000 0.0000 
    0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 
    0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 
C(5HFI ) 3 1 3110 3126 3128  1 3 35 4 1 363 0.29880 0.08862 -0.01177 1.0000 
    0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
    4.0465 0.0000 0.0000 0.0000 -0.0810 0.0000 0.0000 0.0000 0.2750 0.0000 
    0.3130 0.0000 0.0000 -0.2320 0.0000 0.0000 0.0000 0.0400 0.0000 0.0000 
    0.0000 0.0000 0.0000 0.0000 0.0430 0.0000 

はFRACファイルがどのように見えるかです

0.29035 0.05915 -0.06369 
0.28657 0.07680 -0.05079 
0.28180 0.08165 -0.05931 
0.27456 0.07357 -0.04197 
0.27485 0.07855 -0.03091 

期待される成果:

C(5HFE ) 1 2 3304 3122 3124  1 3 28 4 1 99 0.29035 0.05915 -0.06369 1.0000 
    0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
    3.9170 0.0000 0.0560 0.0000 0.0000 -0.1800 0.0000 0.0000 -0.0290 0.0000 
    0.0000 0.0300 0.0000 0.0000 0.0000 -0.2640 0.0000 0.0200 0.0000 0.0000 
-0.0190 0.0000 0.0000 0.0000 0.0000 0.0000 
H(5HFF ) 3 2 3122 3123 3124  1 2 24 4 1 95 0.28657 0.07680 -0.05079 1.0000 
    0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
    1.0440 0.0000 0.0000 0.0000 0.1820 0.0860 0.0000 0.0000 0.0000 0.0000 
    0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 
    0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 
C(5HFG ) 1 2 3304 3124 3122  1 3 28 4 1 99 0.28180 0.08165 -0.05931 1.0000 
    0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
    3.9170 0.0000 0.0560 0.0000 0.0000 -0.1800 0.0000 0.0000 -0.0290 0.0000 
    0.0000 0.0300 0.0000 0.0000 0.0000 -0.2640 0.0000 0.0200 0.0000 0.0000 
-0.0190 0.0000 0.0000 0.0000 0.0000 0.0000 
H(5HFH ) 3 2 3124 3125 3122  1 2 24 4 1 95 0.27456 0.07357 -0.04197 1.0000 
    0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
    1.0440 0.0000 0.0000 0.0000 0.1820 0.0860 0.0000 0.0000 0.0000 0.0000 
    0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 
    0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 
C(5HFI ) 3 1 3110 3126 3128  1 3 35 4 1 363 0.27485 0.07855 -0.03091 1.0000 
    0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
    4.0465 0.0000 0.0000 0.0000 -0.0810 0.0000 0.0000 0.0000 0.2750 0.0000 
    0.3130 0.0000 0.0000 -0.2320 0.0000 0.0000 0.0000 0.0400 0.0000 0.0000 
    0.0000 0.0000 0.0000 0.0000 0.0430 0.0000 

答えて

3
awk 'FNR==NR  {a[NR]=$0; next} 
    /^H|C|O|N|S/ {split(a[++i], b); $14=b[1]; $15=b[2]; $16=b[3]} 
1' frac file 

最初のパスfracや線を格納し、第二のパスfileと置き換える何欲しいです。

私は、fracの行数がfileの一致行と同じであると仮定しました。

+0

ありがとうございます。残念ながら、私は185行目がH、C、O、N、Sで始まっています。しかし、私はコードを少し修正して、期待どおりに動いています。 H、C、O、N、Sで始まる行はfracと同じであると思っています。 awk 'FNR == NR {a [NR] = $ 0;次は} /^ H |^C |^O |^N |^S/{split(a [++ i]、b); $ 14 = b [1]; $ 15 = b [2]; $ 16 = b [3]} 1 'fracファイル – user31735

+1

[checkmark sign](https://i.stack.imgur.com/uqJeW.png)を押して問題が解決した場合は、 。これにより、回答者は15ポイントの評判を得ることができます。元のポスターの評判のポイントから差し引かれることはありません(一部の人々は考えているようです);-) – shellter

関連する問題