我有两个文件。其中一个称为file.gpx
,是轨迹点列表,每个轨迹点由三行组成:
<trkpt...>
<ele>...</ele>
</trkpt>
另一个称为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