我有一个像这样的文件,它在行中包含多个字段。我想显示其中一些,同时用另一个命令处理其中一个。
TITLE,OpenVPN ...
HEADER,CLIENT_LIST,Common Name,Real Address,Virtual Address,Virtual IPv6 Address,Bytes Received,Bytes Sent,Connected Since,Connected Since (time_t),Username,Client ID,Peer ID
CLIENT_LIST,name1,1.1.1.1:1,10.0.0.1,,2692253,3765861,Wed Jun 23 12:51:08 2021,1624452668,name1,4727,0
CLIENT_LIST,name2,2.2.2.2:2,10.0.0.2,,1571221,2080242,Thu Jul 1 19:24:10 2021,1625167450,name2,5625,0
CLIENT_LIST,name3,3.3.3.3:3,10.0.0.3,,2670410,3736957,Wed Jun 23 16:20:51 2021,1624465251,name3,4747,0
...
预期输出为:
name1 10.0.0.1 2021-06-23 12:51:08
name2 10.0.0.2 2021-07-01 19:24:10
name3 10.0.0.3 2021-06-23 16:20:51
我现在的命令是:
grep '^CLIENT_LIST,' /var/run/ovpn-server.status |awk -F',' '{print $2 $4 $9}' |sort
它打印所需的字段,但不将时间戳转换为格式化的时间。这是命令:
date -d @1624452668 +"%Y-%m-%d %H:%M:%S"
如何将date
命令集成到awk
脚本中?或者还有什么其他解决方案可以实现这一点?
我还打算使用column
命令将输出放入列/表布局中,我以前也这样做过,所以这不是问题的一部分。
您可以使用此awk
:
awk -F, -v OFS='t' '$1 == "CLIENT_LIST" {
cmd = "date + 47%Y-%m-%d %H:%M:%S 47 -d 47@" $9 "