Raj*_*Roy 4 sed awk csh cat columns
我想根据第一列中的值在具有不同列的文件中引入换行符。
例如:
输入文件:
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
Run Code Online (Sandbox Code Playgroud)
所需输出:
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
Run Code Online (Sandbox Code Playgroud)
我尝试了 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
Run Code Online (Sandbox Code Playgroud)
$ 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
Run Code Online (Sandbox Code Playgroud)
这会跟踪prev.
如果当前的第一列不同于prev,并且我们不在文件的第一行,则打印换行符。然后无条件打印所有行。
print ""上面代码中的替代方法是 do $0 = ORS $0,它ORS在当前记录的开头添加一个换行符(或其他任何设置,输出记录分隔符)。
这将具有在稍后打印该行时产生额外换行符的效果。