如何使用AWK删除纬度为整数或0.5小数的行?
AWK实现移除特定纬度行的需求
问题描述
我有一组经度固定、纬度可变的坐标数据,原始数据如下:
75.5 36.5 37.4290504456 75.5 36.4 52.4753456116 75.5 36.3 66.4775466919 75.5 36.2 84.0023193359 75.5 36.1 111.997085571 75.5 36 172.343933105 75.5 35.9 111.806427002 75.5 35.8 83.5655899048 75.5 35.7 65.6402206421 75.5 35.6 50.8337936401 75.5 35.5 33.7828178406
需求是移除所有纬度为整数或小数部分为0.5的行,期望得到的结果如下:
75.5 36.4 52.4753456116 75.5 36.3 66.4775466919 75.5 36.2 84.0023193359 75.5 36.1 111.997085571 75.5 35.9 111.806427002 75.5 35.8 83.5655899048 75.5 35.7 65.6402206421 75.5 35.6 50.8337936401
AWK实现方案
直接使用以下AWK命令即可完成需求:
awk '$2*2 != int($2*2)' input.txt
逻辑解释
- 纬度对应数据的第二列
$2,我们通过乘以2的方式简化判断:- 如果纬度是整数(如36),乘2后结果是整数;如果纬度小数部分是0.5(如36.5),乘2后也是整数。
int($2*2)会提取乘2后的整数部分,当$2*2不等于这个整数部分时,说明原始纬度既不是整数,小数部分也不是0.5,此时AWK默认输出整行。
内容的提问来源于stack exchange,提问作者heliozinhow
相关产品推荐
相关产品推荐

