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
我想转换"文件"的第五列用户输入日期格式。 实际上列数和日期格式是动态的,即dt ="%Y-%m-%d%H:%M"和num = $ 5,这将取决于用户的要求。
答案 0 :(得分:1)
只需使用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?中查看此技术的完整说明。