【データ加工 Vim編】Android地図アプリOsmAndの経路座標デー タを取得・加工する
前々回投稿の 【PythonとAndroid地図アプリOsmAnd】経路座標デー タを取得・加工する - よちよちpython では Android地図アプリ OsmAnd で取得・保存した経路座標データファイル(.pgx)から座標データだけを抽出する方法としてPythonを使いました。
前回投稿の 【データ加工 Linuxコマンド編】Android地図アプリOsmAndの経路座標デー タを取得・加工する - よちよちpython では、それをLinuxコマンドで加工しました。
今回は同じことをVimエディタでやってみます。
主に文字列の置換でデータを加工していきます。
実行環境
Vimエディタはターミナル上で動かす高機能なCUIエディタです。
- Termuxアプリにインストールするには
$ pkg install vim ↩️(← 改行 エンターキー) # またはPython用に改造されたものを $ pkg install vim-python ↩️
でできます。下の vim-python
が良いかな。
- vimがインストールされているかどうかの確認
$ pkg list-installed | grep vim ↩️ WARNING: apt does not have a stable CLI interface. Use with caution in scripts. vim-python/stable,now 8.2.4450-2 aarch64 [installed] vim-runtime/stable,now 8.2.4450-2 all [installed,automatic]
vim-python がインストール済みのようです。vim-runtimeは確かvimをインストールすると自動的にインストールされる、と思う。installed,automatic
と書いてあるし。
OsmAndアプリ で取得した経路座標データファイルの gpxファイル は、前もってカレントディレクトリに保存しておきます。
- gpxファイルの存在確認
$ ls | grep *.gpx ↩️ 2022-02-06_15-27_Sun.gpx
1つだけあります。
- Vimエディタでgpxファイルを開く
gpxファイルがカレントディレクトリに1つだけあります。ファイル名を指定するのが面倒なので、以下では「*.gpx
」で開いています。
$ vim *.gpx ↩️
Vimエディタが開かれる。Termuxでは次の画面になる。
Vimを閉じるには
「エスケープキー」を押して通常モードにする→
- 終了コマンドを入力する
- 「
:q!
」 を入力すると、編集・変更を保存せずに終了する - 「
:q
」 を入力で終了する。変更されていると注意が出る - 「
:wq
」 で編集・変更を上書き保存して終了する
- 「
今回は変更しませんので、エスケープキー
→ :q!
入力 でVimを終了させます。
:q!
と入力したところ。ここでエンターキーを入力すれば、変更を保存せずにVimが終了し、通常のターミナル画面に戻ります。
- 座標データ行のみを別ファイルに保存
gpxファイルには、座標データが載っています。「<trkpt
」から始まる行に書かれている。先にLinuxコマンドでその行だけを抜き出し、別ファイルに保存します。元データgpxファイルを変更しない為と、座標データの抽出が楽な為。
$ grep '<trkpt' *.gpx > locations.txt ↩️
「locations.txt」のファイル名で保存した。
- 座標のみ抽出したファイルの中身を見る
上3行だけ見てみます。
$ head -n 3 locations.txt ↩️ <trkpt lat="33.3027671" lon="130.5579563"> <trkpt lat="33.3027594" lon="130.5579148"> <trkpt lat="33.3027713" lon="130.557914">
スペースが入っていたり、座標データ以外の文字列が入っている。
以下では、これらをVimで編集して取り除き、最終的に 緯度と経度がカンマで繋がったCSVファイルに加工していきます。
- 保存した座標ファイルlocations.txtをVimで開く
$ vim locations.txt ↩️
ターミナル上でVimが開かれる。Termuxアプリで開くと、次の画像のような画面になる。
元のgpxファイルから座標の入っている行だけが抽出されている。
Vimでの編集作業
ここからは、上で保存した座標ファイルlocations.txt
を Vimエディタ
で編集していきます。
- 緯度、経度の繋ぎ目をカンマに置換
" lon="
を ,
カンマ に置換します。エスケープキー を入力してコマンドを打てるようにし、次を入力する
:%s/" lon="/,/g
置換コマンド入力中の画面はこんな風
置換コマンドをエンターキーで実行したら置換される
- 変更の上書き保存方法
変更したものを上書き保存したい場合は、エスケープキー を押して、
:w ↩️
で上書きされます。:wq
だと上書き保存してVim終了され、通常のターミナル画面に戻る。
- 先頭の
<trkpt lat="
を置換・削除する
エスケープキーを押してモードを変更し、次を入力
:%s/<trkpt lat="//g
上を入力したらエンターキーで実行すると、
置換された。
- 行末の
">
を置換・削除
:%s/">//g
実行すると、↓
行末の ">
が置換削除された。
- 行先頭のスペースを置換・削除
エスケープキーを押して、次を入力
:%s/ *//g
エンターを押すと↓
完成した。座標がカンマ区切りの2次元データにできた。CSVファイルとして保存します。
既に同名のファイルが存在した ので E13: File exists (add ! to override)
と赤い注意が出た。!
を付ければ同名ファイルを上書き保存できる。中身は前回投稿で作った同じものだ。
:w! locations.csv ↩️
! を付けて、同名ファイルを強制上書き。
変更したものを既存の同名ファイル locations.csv
に強制上書きした。
- Vimを終了する
上で強制上書きしたが、変更中の元のファイル locations.txt
も上書き保存して終了する。結果的に locations.txt
と locations.csv
は同じ中身のファイル。
:wq ↩️
これで元のファイルを上書き保存し、Vimを終了できる。画面は通常のターミナルに戻る。
- 保存終了の際の注意点
※ 元のファイル locations.txt
は変更・編集中なので、未保存終了のコマンド :q
だけでは注意が出る。
【参考】 vimでファイルを保存するコマンドのまとめ。 | WWWクリエイターズ
結果は達成したので以上です。
が、Vimでは操作をマクロとして登録し、同じ作業を連続で実行できたりする。次回はそれをやりましょう。
Vimはビックリするぐらい便利な機能が色々ある。だが覚えられない。 覚えれば格段に作業の効率が上がる。
以上です。
【参考 関連】