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