あるファイルのタイムスタンプを別のファイルに挿入する

あるファイルのタイムスタンプを別のファイルに挿入する

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

関連情報