Unix 不从文件中提取数值
我试图从如下矩阵中提取非数值:Unix 不从文件中提取数值,unix,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 由于
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_这样的名称结构,提取字母数字字符对我来说太难了(因为我在Unix编程方面缺乏经验),所以我尝试从数字字符中区别提取非数字字符。
也就是说,删除数字字段后,非数字字段将直接保留在那里。
如何做到这一点
最好的
Eleonora你说名字后面总是跟数字?那么:
tr -s ' ' '\n' your_file | sed -n '1~2p'
通过合理的
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]+\.?)$
awk
命令后添加文件名,awk
将自动解析它们。