2つのファイルがあります。そのうちの1つはfile.gpx
軌跡点のリストで、それぞれは3本の線で構成されています。
<trkpt...>
<ele>...</ele>
</trkpt>
もう1つはと呼ばれtimes.txt
、これは別々の行のリストで、各行は次のようになります。
<time>...</time>
私がしなければならないのは、<time>...</time>
times.txtの各行をfile.gpxに挿入して、file.gpxのすべてのトラックポイントが次のように見えるようにすることです。
<trkpt...>
<ele>...</ele>
<time>...</time>
</trkpt>
私はこれを達成する方法を知りたいです。
(...
私の質問の目的にかかわらず、異なる価値を表します。)
助けてくれてありがとう。
答え1
使用awk
:
awk '
FNR==NR{ # if this is the first input file...
t[++idx]=$0 # save record in array `t` at index `idx` (pre-incremented)
next # continue with next record
}
1 # print record of second input file
/<ele>.*<\/ele>/{ # if record matches...
print t[++idx2] # print array value at `idx2` (pre-incremented)
}
' times.txt file.gpx > new.gpx
答え2
GNU sedを使用すると、ファイルから一致する各行を読み取り、次を使用して行を挿入できますR
。
sed '\:<ele>.*</ele>:R times.txt' file.gpx
オプションを追加して結果を新しいファイルにリダイレクトしたり、file.gpx
現在の場所から変更したりできます-i
。
答え3
使用awk
:
awk '
BEGIN { f=ARGV[2]; ARGV[2]=""; }
/<trkpt.*>/ {k=3}
(k-->0) && (!k) &&
(getline t < f > 0) {
print t
};1
END { close(f) }
' file.gpx times.txt