使用 sed 或 awk 在每一行中转换 unix epoch 时间戳列

Pra*_*rat 2 sed awk timestamps

我有一个包含以下输入样本数据的文件:

1137921146.499 180900 61.153.158.197 1409 
1137921158.698 181622 61.153.158.197 1409
1137921758.163 180026 221.226.124.114 1374
1137921802.016 179485 121.13.128.132 1409
Run Code Online (Sandbox Code Playgroud)

第一列是 unix 纪元时间戳,我需要将其转换为人类可读的格式,另外我希望数据按如下方式分隔

Sun Jan 22 01:12:26 PST 2006|180900|61.153.158.197|1409   
Sun Jan 22 01:12:38 PST 2006|181622|61.153.158.19|1409
Run Code Online (Sandbox Code Playgroud)

我尝试使用 sed 's/ {1,}/|/g' 添加分隔符并使用 date -d @1137921146.499 转换日期。但是我无法在一个命令中将这两个组合在一起。

Rom*_*nov 6

您可以像这样使用 awk 程序:

awk '{ print strftime("%c",$1)"|" $2"|"$3"|"$4 }' file
Run Code Online (Sandbox Code Playgroud)

核心是使用strftime函数将epoch转成日期格式

这是输出:

#awk '{ print strftime("%c",$1)"|" $2"|"$3"|"$4 }' file
Sun Jan 22 10:12:26 2006|180900|61.153.158.197|1409
Sun Jan 22 10:12:38 2006|181622|61.153.158.197|1409
Sun Jan 22 10:22:38 2006|180026|221.226.124.114|1374
Sun Jan 22 10:23:22 2006|179485|121.13.128.132|1409
Run Code Online (Sandbox Code Playgroud)

PS 或者您可以使用隐式输出分隔符:

awk  'BEGIN { OFS="|"} {$1= strftime("%c",$1) }1' file
Run Code Online (Sandbox Code Playgroud)