前々回投稿の 【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はビックリするぐらい便利な機能が色々ある。だが覚えられない。 覚えれば格段に作業の効率が上がる。
以上です。
【参考 関連】