不从文件中提取数值

时间:2012-09-03 15:27:55

标签: unix

我试图从这样的矩阵中提取不是数值:

32540_at        0.138306  78047_s_at    0.133885 81737_at   0.163546 81811_at   0.181725 AAGAB          0.157073 AARSD1         0.114351

(该文件包含不同长度的行,但每次名称后跟一个数字)

具体来说,我需要的输出如下:

32540_at 78047_s_at 81737_at 81811_at AAGAB AARSD1

由于我很难(由于我在Unix编程方面经验不足)而难以提取字母数字字符,因为81737_at等名称的结构试图从数字字符中提取不同数字的字符。 。 也就是说,删除数字字段,非数字字段将直接保留在那里。 如何做到这一点?

最佳,

Eleonora

2 个答案:

答案 0 :(得分:2)

通过合理的RSORS设置,awk非常直接:

awk -v RS=' +|\n' -v ORS=' ' '!/^[0-9.]+$/'

输出:

32540_at 78047_s_at 81737_at 81811_at AAGAB AARSD1 

解释

  • RS=' +|\n':用空格或换行符分隔每条记录。
  • ORS=' ':在每条记录打印后插入一个空格。
  • !/^[0-9.]+$/:如果记录不仅包含数字和点,请将其打印出来。更正确的数字模式是(不考虑科学记数法):!/^([0-9]+\.[0-9]*|[0-9]*\.[0-9]+|[0-9]+\.?)$

答案 1 :(得分:1)

你说姓名后面跟着号码?怎么样:

tr -s ' ' '\n' your_file | sed -n '1~2p'