从制表符分隔txt文件提取指定范围整数、小数及科学计数法数值
制表符分隔txt文件指定范围数值提取方案
需求说明
- 输入文件为4行4列的制表符分隔txt,第一行为表头,第一列为行名
- 需要提取第2到4行、第2到4列的所有数值(支持整数、小数、科学计数法格式)
- 输出要求为空格分隔的连续数值串,末尾追加换行符
\n
示例输入文件内容
component sigma h2 h2_se G -5.55758e-19 -0.0964725 26.3887 GxE 6.13144e-18 1.09647 26.3651 noise 0 0 0
期望输出
-5.55758e-19 -0.0964725 26.3887 6.13144e-18 1.09647 26.3651 0 0 0
错误尝试说明
此前的grep命令没有覆盖数值的负号、科学计数法标识、整数等多种格式,无法得到完整正确的结果:
grep -o '0.[[:digit:]]*' myfile:仅能匹配0开头的小数,漏配负数、非0开头数值、科学计数法数值grep -o '[[:digit:]]*' myfile:仅能匹配数字片段,漏配负号、小数点、科学计数法标识,拆分后输出零散的数字内容
可行解决方案
使用awk按行号过滤、按字段提取即可精准实现需求,命令如下:
awk 'NR>1 {printf "%s %s %s ", $2,$3,$4}END{printf "\n"}' myfile
命令逻辑说明
NR>1:过滤掉第1行表头,仅处理第2到4行的有效数据printf "%s %s %s ", $2,$3,$4:对每一行按顺序输出第2、3、4列的内容,列之间用空格分隔END{printf "\n"}:所有行处理完成后在末尾追加换行符
内容的提问来源于stack exchange,提问作者Yang
相关产品推荐
相关产品推荐

