根据值列中的文本在具有不同列的文件中引入换行符

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)

Kus*_*nda 8

$ 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在当前记录的开头添加一个换行符(或其他任何设置,输出记录分隔符)。

这将具有在稍后打印该行时产生额外换行符的效果。