如何在模式后拆分列值

时间:2018-05-03 13:27:14

标签: bash awk sed

我试图通过在链标识符后面添加一个空格来拆分.pdb文件的第五列:

ATOM  12107  N   CYS  D1742     -42.369  73.203 -44.599  1.00224.20      C    N  

这样输出看起来像:

ATOM  12107  N   CYS  D 1742     -42.369  73.203 -44.599  1.00224.20      C    N  

字母在文件中更改后的数字。我试过了

sed -i 's/D/D /5' test.pdb

没有成功,我想我应该引入通用字符来替换字母后面的数字并在命令中引入它,以便能够迭代地执行此操作。

4 个答案:

答案 0 :(得分:1)

关注awk可能对您有帮助。

awk '{$5=substr($5,1,1) FS substr($5,2)} 1' OFS="\t"  Input_file

如果您需要将输出保存到相同的Input_file本身,那么您也可以在上面的代码中附加> temp_file && mv temp_file Input_file

答案 1 :(得分:1)

使用sed您需要自己计算字段数,但不会将空格标准化为副作用。

$ sed -E 's/((\S+\s+){4}.)/\1 /' file

ATOM  12107  N   CYS  D 1742     -42.369  73.203 -44.599  1.00224.20      C    N 

答案 2 :(得分:0)

使用GNU awk。由于您没有指定字段分隔符是什么,并且它似乎是一堆空格(是的,最可能是tab),我使用split将分隔符保留为数组seps和{{ 1}}将空格添加到第五个字段:

sub

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed -r 's/(\S)(\S*)/\1 \2/5' file

列必须包含一个或多个非空格字符,这会在第五列的第一个字符和零个或多个字符之间放置一个空格。