awk提取指定区块内符合浮点阈值的行时大数值判断失效问题
问题场景
需要处理包含多张表格和矩阵的文本文件,定位名为“Dataset of interest”的区块,提取第二列浮点数大于0.000001且小于指定阈值(如500)的行。
原数据格式示例
(some tables, matrices etc) Dataset of interest : 0 0 0.000000 1 0.000000 6 41.572543 7 47.082104 8 66.534233 9 112.409794 10 121.771594 11 134.398445 20 302.705391 21 304.451176 28 474.496684 29 495.522236 30 502.182750 31 522.627098 32 544.878024 56 1334.207831 97 3214.104108 more properties : certainly (even more tables, matrices etc)
错误尝试及问题
先后尝试以下两条awk命令均未得到正确结果:
命令1
awk '/Dataset of interest/,/more properties/ { if ( $2 > 0.000001 && $2 < 500) print $1, $2}' file.txt
命令2
awk '/Dataset of interest/,/more properties/ {for(i = 2 ; i <= NF ; i++) { if ($i ~ /^[0-9]+[.][0-9]+$/ && $i > 0.000001 && $i < 500 ) print $1, $2}}' file.txt
错误现象:小数点前四位及以上的大数值(如3214.104108)未被过滤;调整阈值为$2 < 200时无输出。使用的是mawk 1.3.4版本。
解决方法
通过将判断条件中的$i改为$i+0(强制转换为数值类型),得到有效命令:
awk '/Dataset of interest/,/more properties/ {for(i = 2 ; i <= NF ; i++) { if ($i ~ /^[0-9]+[.][0-9]+$/ && $i+0 > 0 && $i+0 < 500 ) print $1, $2}}' file.txt
该命令可正确提取符合条件的行。
内容的提问来源于stack exchange,提问作者Leon
相关产品推荐
相关产品推荐

