1

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

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

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

最好的,

埃莱奥诺拉

4

2 回答 2

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]+\.?)$.
于 2012-09-03T16:05:51.793 回答
1

你说名字后面总是跟数字?怎么样:

tr -s ' ' '\n' your_file | sed -n '1~2p'
于 2012-09-03T15:55:09.273 回答