我试图从这样的矩阵中提取不是数值:
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答案 0 :(得分:2)
通过合理的RS
和ORS
设置,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'