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

Sed 删除列条目的一部分(取决于条目的开头),sed,Sed,我有一个这样的文件(还有数百万行): 我想将其更改为如下所示: 1 rs10900604 0 798400 G A 1 rs11240777 0 798959 A G 1 1:4970452:885689:G:A 0 885689 G A 因此,我想删除第二列中冒号后面的所有内容,但前提是该列中的条目以“rs…”开头 我已经试着用sed来做这件事,并且可以用se

我有一个这样的文件(还有数百万行):

我想将其更改为如下所示:

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删除冒号后的所有内容

sed 's/\:[0-9]*\:[A-Z]*\:[A-Z]*//g'

…但我不知道如何为“rs…”条目赋予它特殊性。

可能是
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

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

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