gpt4 book ai didi

linux - 如何转换文件中的所有 unix 日期?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:49:01 30 4
gpt4 key购买 nike

我一直在搜索,但还没有成功完成这项任务..

我有一些带有多个日期的 gps 数据文件,以秒为单位显示为 Unix 纪元时间,我需要转换这些文件,以便将文件数据插入电子表格。

date可以转换它们,例如

$ date -d @1441202338 +'%d-%m-%y %H:%M:%S'
02-09-15 21:58:58

Unix 日期是用引号括起来的十位数字,还有其他更长的数字,例如经度和纬度,所以要仅替换日期,我需要在引号中找到恰好十位数字。

我已经开始构建一个 sed 命令,但我无法找到如何在引号中搜索字符串,然后仅将字符串发送到 date

sed "s/\([0-9]{10}\)/$(date -d @\1 +'%d-%m-%y %H:%M:%S')/g" file

会放 \<\"在那里表示开头有引号?

我也不确定 date能看懂\1

有人可以指导我找到解决方案吗?

编辑:

这是我尝试转换的文件中的示例行:

type="waypoint" latitude="22.2091608952380115" longitude="44.65250015586757" name="name" altitude="309.18737800000002" unixtime="1441202338"

哪里unixtime="1441202338"必须改为 unixtime="02-09-15 21:58:58" .

(很明显,日期将不再是“unixtime”,但之后可以更改该标签)

编辑2:

一个最小的文件示例:

'#VIKING GPS Data file http://viking.sf.net/
FILE_VERSION=1

xmpp=4.000000
ympp=4.000000
lat=40.714490
lon=-74.007130
mode=mercator
color=#cccccc
highlightcolor=#eea500
drawscale=t
drawcentermark=t
drawhighlight=t

~Layer TrackWaypoint
name=name
tracks_visible=t
waypoints_visible=t
routes_visible=t
trackdrawlabels=t
trackfontsize=3
drawmode=0
trackcolor=#000000
drawlines=t
line_thickness=1
drawdirections=f
trkdirectionsize=5
drawpoints=t
trkpointsize=2
drawelevation=f
elevation_factor=30
drawstops=f
stop_length=60
bg_line_thickness=0
trackbgcolor=#ffffff
speed_factor=30.000000
tracksortorder=0
drawlabels=t
wpfontsize=3
wpcolor=#000000
wptextcolor=#ffffff
wpbgcolor=#8383c4
wpbgand=f
wpsymbol=0
wpsize=4
wpsyms=t
wpsortorder=1
drawimages=t
image_size=64
image_alpha=255
image_cache_size=300
metadatadesc=
metadataauthor=
metadatatime=2015-10-03T08:11:32.776627Z
metadatakeywords=


~LayerData
type="waypointlist"
type="waypoint" latitude="5.2091608952380115" longitude="101.65250015586757" name="different-names" altitude="309.18737800000002" unixtime="1441202338" symbol="navaid, amber"
type="waypointlistend"
~EndLayerData
~EndLayer'

最佳答案

使用 gawk 时间函数

示例

echo 'altitude="309.18737800000002" unixtime="1441202338"'|\
gawk '$(NF-1)=strftime("%d-%m-%y %H:%M:%S",$(NF-1))' FS=\" OFS=\"

结果

altitude="309.18737800000002" unixtime="02-09-15 15:58:58"

完整文件过滤输入文件,请使用:

gawk '/unixtime=/{$12=strftime("%d-%m-%y %H:%M:%S",$12)}1' FS=\" OFS=\" inputfile > targetfile

结果

...
...
...
~LayerData
type="waypointlist"
type="waypoint" latitude="5.2091608952380115" longitude="101.65250015586757" name="different-names" altitude="309.18737800000002" unixtime="02-09-15 15:58:58" comment="29-08-11 8:27:49" symbol="navaid, amber"
type="waypointlistend"

~EndLayerData
~EndLayer

如果您的 gawk 支持 inplace 替换,请检查:https://www.gnu.org/software/gawk/manual/html_node/Extension-Sample-Inplace.html

关于linux - 如何转换文件中的所有 unix 日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33776948/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com