gpt4 book ai didi

linux - 用 UNIX 时间戳替换日期,同时保留该行的其余部分

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

我有一条这样的线

copy to somewhere from somewhere at Wed 13 Apr 10:18:25 CEST 2016 filesize ...

我想将日期转换为 Unix 时间戳。而该行的其余部分保持不变。我想对完整文件执行此操作。我能想到的唯一方法是提取转换它的日期并创建一个新文件并填写时间戳。

最佳答案

我不确定“filesize”是否在您的文件中结束了一行。你确实用它结束了这一行,但你也写了'...'这让我想知道是否还有更多内容。当您提出涉及文本操作的问题时,这些细节至关重要。

假设'filesize'结束一行,下面的代码可能会有所帮助,否则它只是一个有用的模式,您可以根据需要进行修改。

while read -r line; do
# The part containing the date and the file size.
details_str="${line#*at }"
# The date part.
date_str="${details_str% *}"
# The file size.
file_size="${details_str#$date_str }"

# Arrange date part, so it can be acceptable by 'date'
# [Correct] 10:18:25 Wed 13 Apr CEST 2016
# [Incorrect] Wed 13 Apr 10:18:25 CEST 2016
read -r d n m t z y <<< "$date_str"
printf -v date_str '%s %s %s %s %s %s' "$t" "$d" "$n" "$m" "$z" "$y"

# Convert date part to milliseconds since epoch.
millis=$(date --date="$date_str" '+%s')

# Print formatted line.
printf '%s %s %s\n' "${line% $details_str}" "$millis" "$file_size"

done < /path/to/your/file

为了测试它,我创建了以下文件:

copy to somewhere1 from somewhere at Wed 13 Apr 10:18:25 CEST 2016 20K
copy to somewhere2 from somewhere at Wed 13 Apr 09:14:25 CEST 2016 30K
copy to somewhere3 from somewhere at Wed 13 Apr 12:18:25 CEST 2016 40K

测试(脚本名称为 sof ):

./sof 
copy to somewhere1 from somewhere at 1460535505 20K
copy to somewhere2 from somewhere at 1460531665 30K
copy to somewhere3 from somewhere at 1460542705 40K

关于linux - 用 UNIX 时间戳替换日期,同时保留该行的其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36602812/

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