如何在AWK中转换$2位置变量存储的Unix时间戳为指定日期格式
实现方案
方案1:GNU AWK(gawk,推荐,性能更高)
GNU AWK内置strftime函数可以直接完成时间戳到指定日期格式的转换,无需调用外部进程,处理大量数据时效率优势明显:
awk -F'|' '{ gsub(/"/, "", $2) ip = substr($1, 2) printf "\"%s - %s\"\n", ip, strftime("%d.%m.%y %H:%M:%S", $2) }' 你的数据文件路径
你也可以直接管道输入测试效果:
echo '"1.1.1.1|1636057103"' | awk -F'|' '{gsub(/"/,"",$2);printf "\"%s - %s\"\n",substr($1,2),strftime("%d.%m.%y %H:%M:%S",$2)}'
输出完全匹配要求的格式:"1.1.1.1 - 04.11.21 22:18:23"
方案2:通用AWK(兼容BSD awk/macOS原生awk)
如果你的环境没有GNU AWK,可以调用外部date命令实现转换,注意每次调用后要关闭命令避免文件句柄泄露:
awk -F'|' '{ gsub(/"/, "", $2) ip = substr($1, 2) cmd = "date +\"%d.%m.%y %H:%M:%S\" -d @"$2 cmd | getline dt close(cmd) printf "\"%s - %s\"\n", ip, dt }' 你的数据文件路径
内容的提问来源于stack exchange,提问作者aku
相关产品推荐
相关产品推荐

