使用 sed(或其他 GNU/Linux 工具)在边界框内查找 GPS?
Using sed (or other GNU/Linux tool) to find GPS within a bounding box?
我希望使用粗线条命令行工具从非常大的 csv 文件过滤到较小的文件。
示例数据在这里:
2021-03-19 09:37:00,LISBON,39.1660,-9.5114,18.5600,60.3886
2021-03-19 09:38:00,LISBON,38.8799,-9.3713,19.1051,27.9254
2021-03-19 09:39:00,LISBON,38.5964,-8.8315,19.1044,29.2456
2021-03-19 09:40:00,LISBON,38.4241,-8.9433,18.1184,35.7412
2021-03-19 09:41:00,LISBON,38.8015,-8.6765,17.7960,41.2380
2021-03-19 09:42:00,LISBON,38.4844,-9.0106,19.4660,27.1470
2021-03-19 09:43:00,LISBON,38.3213,-8.9620,19.7043,45.5808
2021-03-19 09:44:00,LISBON,38.9479,-9.1680,19.0704,26.8376
^C21-03-19 09:45:00,LISBON,37.9198,-9.2775,17.8219,88.4726
这里的第三和第四个字段是GPS坐标。
我希望能够将它们过滤到距离中心点约 25 公里的范围内 38.7077507, -9.1365919
,sed
对此非常有效。
例如 - sed -n '/38.7[2-4]..,-9.1[3-7]../p'
非常接近。
但是,我想让 'bounding box' 更大,这就是事情变得有点混乱的地方。例如,假设我想将经度一直向下扩展到 -8.9。你如何为此编写正则表达式?
我尝试了类似 sed -n '/38.7[2-4]..,-[8-9]...../p'
的方法,但问题是这个 returns '-8.1' 太远了,当我想在 '-8.9' 停止它时。
我知道如果我把它变成更丰富的语言(例如 Python),这非常简单,但我想在前端做同样多的事情(在我注入数据管道之前) ), 而 sed 在这方面的表现非常出色。
谢谢!
不想为此滥用 sed
,所以这里有一个 awk
解决方案。
awk -F, '{x=38.7077507-; y=-9.1365919-; if(x^2+y^2<0.3^2) print}' input.txt
# ^~~~~~~~~~ x ^~~~~~~~~~ y ^~~ r
我希望使用粗线条命令行工具从非常大的 csv 文件过滤到较小的文件。
示例数据在这里:
2021-03-19 09:37:00,LISBON,39.1660,-9.5114,18.5600,60.3886
2021-03-19 09:38:00,LISBON,38.8799,-9.3713,19.1051,27.9254
2021-03-19 09:39:00,LISBON,38.5964,-8.8315,19.1044,29.2456
2021-03-19 09:40:00,LISBON,38.4241,-8.9433,18.1184,35.7412
2021-03-19 09:41:00,LISBON,38.8015,-8.6765,17.7960,41.2380
2021-03-19 09:42:00,LISBON,38.4844,-9.0106,19.4660,27.1470
2021-03-19 09:43:00,LISBON,38.3213,-8.9620,19.7043,45.5808
2021-03-19 09:44:00,LISBON,38.9479,-9.1680,19.0704,26.8376
^C21-03-19 09:45:00,LISBON,37.9198,-9.2775,17.8219,88.4726
这里的第三和第四个字段是GPS坐标。
我希望能够将它们过滤到距离中心点约 25 公里的范围内 38.7077507, -9.1365919
,sed
对此非常有效。
例如 - sed -n '/38.7[2-4]..,-9.1[3-7]../p'
非常接近。
但是,我想让 'bounding box' 更大,这就是事情变得有点混乱的地方。例如,假设我想将经度一直向下扩展到 -8.9。你如何为此编写正则表达式?
我尝试了类似 sed -n '/38.7[2-4]..,-[8-9]...../p'
的方法,但问题是这个 returns '-8.1' 太远了,当我想在 '-8.9' 停止它时。
我知道如果我把它变成更丰富的语言(例如 Python),这非常简单,但我想在前端做同样多的事情(在我注入数据管道之前) ), 而 sed 在这方面的表现非常出色。
谢谢!
不想为此滥用 sed
,所以这里有一个 awk
解决方案。
awk -F, '{x=38.7077507-; y=-9.1365919-; if(x^2+y^2<0.3^2) print}' input.txt
# ^~~~~~~~~~ x ^~~~~~~~~~ y ^~~ r