我正在尋找使用廣泛的筆劃命令列工具從一個非常大的 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 對此非常有效.
謝謝!
uj5u.com熱心網友回復:
不想為此濫用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 ^~~ r
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/439446.html
上一篇:rsync不適用于包含空格的變數
