gpt4 book ai didi

linux - 使用 awk 更改文件中的日期格式

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:41 25 4
gpt4 key购买 nike

var1= date -d "19521029 1010" +"%Y-%m-%d %H:%M"  

echo$var1

它工作正常,但 awk 内的 date -d 不工作

文件

KOD19|KAD37748|DEL37728|VIDYA|19521029 1010|201209111625
SASI19|NAS38228|DEL37728|KARTHIKA|19521029 0000|201308071912
RADHA94|VAS37748|DEL37728|LALINKA|19521029 0000|201407061815

第一种方法

awk 'BEGIN {FS=OFS="|"} $5=date -d "$5"+"%Y-%m-%d %H:%M" {print}' file

第二种方法

awk -F '|' '{$5=date -d $5+"%Y-%m-%d %H:%M"; {OFS="|"}; print}' file

期望的输出

KOD19|KAD37748|DEL37728|VIDYA|1952-10-29 10:10|201209111625
SASI19|NAS38228|DEL37728|KARTHIKA|1952-10-29 10:10|201308071912
RADHA94|VAS37748|DEL37728|LALINKA|1952-10-29 10:10|201407061815

我想将"file"的第五列转换为用户输入日期格式。实际上列号和日期格式是动态的,即 dt="%Y-%m-%d %H:%M"和 num=$5 这将很大程度上取决于用户的要求。

最佳答案

只需使用 match() 捕获第 5 个字段中的数据并将其打印回来:

awk -F"|" -v OFS="|" '{
match($5, /([0-9]{4})([0-9]{2})([0-9]{2}) ([0-9]{2})([0-9]{2})/, a);
$5=sprintf("%d-%d-%d %s:%s", a[1], a[2], a[3], a[4], a[5])
}1' file

它返回:

$ awk -F"|" -v OFS="|" '{match($5, /([0-9]{4})([0-9]{2})([0-9]{2}) ([0-9]{2})([0-9]{2})/, a); $5=sprintf("%d-%d-%d %s:%s", a[1], a[2], a[3], a[4], a[5])}1' file
KOD19|KAD37748|DEL37728|VIDYA|1952-10-29 10:10|201209111625
SASI19|NAS38228|DEL37728|KARTHIKA|1952-10-29 00:00|201308071912
RADHA94|VAS37748|DEL37728|LALINKA|1952-10-29 00:00|201407061815

请参阅 How to filter logs easily with awk? 中对此技术的完整描述。 .

关于linux - 使用 awk 更改文件中的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36710730/

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