Awk
根據值列中的文本在具有不同列的文件中引入換行符
我想根據第一列中的值在具有不同列的文件中引入換行符。
例如:
輸入文件:
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
$ 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 ""
是 do$0 = ORS $0
,它將換行符(或任何ORS
設置為輸出記錄分隔符的 )添加到目前記錄的開頭。這將在稍後列印該行時產生額外的換行符。