値列のテキストに基づいて異なる列を持つファイルに改行を導入する

値列のテキストに基づいて異なる列を持つファイルに改行を導入する

最初の列の値に基づいて、他の列があるファイルに改行を導入したいと思います。

たとえば、

入力ファイル:

1aa6 HETATM 4MO A 803
1aa6 HETATM SF4 A 800
1ao0 HETATM 5GP A 467
1ao0 HETATM SF4 B 466
1ao0 HETATM SF4 C 466
1b0y HETATM SF4 A  87
1blu HETATM SF4 A 101
1blu HETATM SF4 A 102


希望の出力:

1aa6 HETATM 4MO A 803
1aa6 HETATM SF4 A 800

1ao0 HETATM 5GP A 467
1ao0 HETATM SF4 B 466
1ao0 HETATM SF4 C 466

1b0y HETATM SF4 A  87

1blu HETATM SF4 A 101
1blu HETATM SF4 A 102


cshスクリプトを試しましたが、成功しませんでした。

#! /bin/csh
set bin = /home/x/bin

foreach i (`cat pdb_ligands | awk '{print $1}'`)
        echo $i
        sed "s/$i/&\n\n/" pdb_ligands > output.txt
end

ベストアンサー1

$ awk 'NR > 1 && $1 != prev { print "" } { prev = $1 }; 1' pdb_ligands
1aa6 HETATM 4MO A 803
1aa6 HETATM SF4 A 800

1ao0 HETATM 5GP A 467
1ao0 HETATM SF4 B 466
1ao0 HETATM SF4 C 466

1b0y HETATM SF4 A  87

1blu HETATM SF4 A 101
1blu HETATM SF4 A 102

これは前の行の最初の列の内容を追跡しますprev

現在の最初の列がファイルの最初の列と異なり、ファイルprevの最初の行にない場合は、改行文字が印刷されます。次に、無条件にすべての行を印刷します。


print ""上記のコードの代替案は、現在のレコードの先頭に$0 = ORS $0改行文字(またはORS出力レコード区切り文字が設定されているすべての項目)を追加するdoです。

後で行を印刷すると、追加の改行が生成されます。

おすすめ記事