有选择地删除小数位的命令

时间:2018-08-26 18:23:45

标签: awk

我有一个带有数字ID的基因ID的列表,如下所示:

输入文件:

Solyc02g080080.3.1 Solyc02g082880.2.1 0.935486990245651 0.00610864337672501
Solyc02g079533.1.1 Solyc02g082880.2.1 0.929128021921794 0.00735626670839373
Solyc02g080670.3.1 Solyc02g082880.2.1 0.973014871168575 0.00108247051974075

我要删除“。”从前两列开始,而不会打扰后两列

输出:

Solyc02g080080 Solyc02g082880 0.935486990245651 0.00610864337672501
Solyc02g079533 Solyc02g082880 0.929128021921794 0.00735626670839373
Solyc02g080670 Solyc02g082880 0.973014871168575 0.00108247051974075

我尝试使用: awk -F. '{print $1}' file

但是只打印第一列。任何建议,不胜感激。谢谢

2 个答案:

答案 0 :(得分:2)

$ awk '{for (i=1;i<=2;i++) sub(/\..*/,"",$i)} 1' file
Solyc02g080080 Solyc02g082880 0.935486990245651 0.00610864337672501
Solyc02g079533 Solyc02g082880 0.929128021921794 0.00735626670839373
Solyc02g080670 Solyc02g082880 0.973014871168575 0.00108247051974075

答案 1 :(得分:1)

awk '{
  sub(/\..*/, "", $1)
  sub(/\..*/, "", $2)
  print
}' input.file

作为副作用,它将重复的分隔符折叠为一个。例如,

Solyc02g080080.3.1 Solyc02g082880.2.1  0.935486990245651   0.00610864337672501

将是

Solyc02g080080 Solyc02g082880 0.935486990245651 0.00610864337672501