Unix:あるファイルの列全体を別のファイルの単一の値に置き換えます。

Unix:あるファイルの列全体を別のファイルの単一の値に置き換えます。

unixを使用して、あるファイルの列を別のファイルの単一の値に置き換えたいと思います。

ファイル1は、次の構造のpdbファイルです。

HETATM   14  H4B FAD B 600      95.544  50.240  71.308  1.00 -1.00 H  
HETATM   14  H4B FAD B 600      95.544  50.240  71.308  1.00 -1.00 H  

次のように、列11を別のファイル(ファイル2)に格納されている単一の値に置き換えたいと思います。

[1, 27, -81.883, 4.0]
[3, 38, -66.122, 12.0]
[3, 57, -62.134, 12.0]

ファイル 2 (行 1、列 3) の値がファイル 1、列 11 の値になり、ファイル 1 が次のようになります。

HETATM   14  H4B FAD B 600      95.544  50.240  71.308  1.00 -81.88 H  
HETATM   14  H4B FAD B 600      95.544  50.240  71.308  1.00 -81.88 H

次のコマンドを使用して、ファイル1の列11を単一の値(この場合は2)に置き換えることができます。

awk '{$11=2}1' File1

私はこのコードを見つけました。https://stackoverflow.com/questions/7846476/replace-column-in-one-file-with-column-from-another-using-awk

awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' f2 f1

しかし、file2から希望の値をfile1にインポートするには、awkとsedの組み合わせを使用する必要があると思います。

次のコードは、列11の最初の行を提供します。

awk 'FNR==1{print $11}'

私はこれら2つを組み合わせる方法を知りません。

データセットごとに値が変更されるため、値で取得できません(何百ものpdbファイルを変更する必要があります)。

誰でも助けることができますか?

以下の両方のソリューションは私のpdbファイル形式を台無しにしました。つまり、次のような結果が得られた。

HETATM 1 PA FAD B 600 95.887 47.194 74.387 1.00 -73.248 

変える

HETATM    1  PA  FAD B 600      95.987  47.188  74.293  1.00 -73.248

私が何か間違っているのか、それともどんなアイデアがあるのでしょうか?

ベストアンサー1

まず、ファイル2から目的のフィールドを抽出します。

value="$(awk -F, 'NR==1{print $3;exit}' file2)"

次に、ファイル1の代替コードに挿入します。

awk '{$11 = v} 1' v="$value" file1

おすすめ記事