删除列条目的一部分(取决于条目的开头)

时间:2015-01-28 16:25:28

标签: sed

我有一个看起来像这样的文件(以及数百万条其他行):

1       rs10900604:798400:A:G   0       798400  G       A
1       rs11240777      0       798959  A       G
1       1:4970452:885689:G:A    0       885689  G       A

我想改变它,看起来像这样:

1       rs10900604   0       798400  G       A
1       rs11240777      0       798959  A       G
1       1:4970452:885689:G:A    0       885689  G       A

所以,我想删除第二列冒号后的所有内容,但前提是列中的条目以“rs ...”开头

我已尝试用sed执行此操作,并可以使用

删除冒号后的所有内容
sed 's/\:[0-9]*\:[A-Z]*\:[A-Z]*//g'

...但我无法弄清楚如何赋予“rs ...”条目特异性。

2 个答案:

答案 0 :(得分:2)

awk可以轻松完成

$ awk '$2 ~ /^rs/{ gsub(":.*", "", $2) }1' input
1       rs10900604 0 798400 G A
1       wrs11240777      0       798959  A       G
1       1:4970452:885689:G:A    0       885689  G       A

答案 1 :(得分:1)

这对我有用,但我很少使用sed,所以可能有更好的解决方案:

sed '/rs.*/ s/\:[0-9]*\:[A-Z]*\:[A-Z]*//' textfile.txt