我希望从一个非常大的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'变得相当接近。
然而,我想要使‘包围框’更大,这是事情变得有点混乱。例如,假设我想把经度一直延伸到-8.9。你如何为这个写一个正则表达式?
我尝试了类似于sed -n '/38.7[2-4]..,-[8-9]...../p'的东西,但问题是当我想在'-8.9‘停止时,返回'-8.1’太远了。
我知道,如果我让它使用更丰富的语言(例如Python),这是相当简单的,但我想在前端(在数据管道受伤之前)做同样多的工作,而sed在这方面的性能非常好。
谢谢!
发布于 2022-03-06 19:45:27
不想为此滥用sed,所以这里有一个awk解决方案。
awk -F, '{x=38.7077507-$3; y=-9.1365919-$4; if(x^2+y^2<0.3^2) print}' input.txt
# ^~~~~~~~~~ x ^~~~~~~~~~ y ^~~ rhttps://stackoverflow.com/questions/71373613
复制相似问题