我想要设置一个别名或脚本,以便显示 dnsmasq 具有的 DHCP 绑定。
$ cat /var/lib/misc/dnsmasq.leases
1411349054 08:11:96:e9:52:ec 192.168.1.96 W11837894 *
1411413528 b4:b6:76:0c:c9:4d 192.168.1.46 root-HP-9470m *
1411263016 00:1b:21:0e:f2:bd 192.168.1.219 root-Dell-DM061 *
1411357237 00:01:2e:4d:49:bd 192.168.1.31 ata *
1411263041 00:30:67:d2:25:65 192.168.1.51 root-TA75M *
我可以取第一列并执行日期 -d @1411349054 (或awk '{print $1}' /var/lib/misc/dnsmasq.leases | awk '{ print strftime("%c")}'
)
Sun Sep 21 20:24:14 CDT 2014
我正在寻找 awk 中的一种格式化方法:
Sun Sep 21 20:24:14 CDT 2014 08:11:96:e9:52:ec 192.168.1.96 W11837894 *
Mon Sep 22 14:18:48 CDT 2014 b4:b6:76:0c:c9:4d 192.168.1.46 root-HP-9470m *
有人有主意吗?
答案1
您可以尝试以下 awk 单行命令,
awk 'NF{ $1=strftime("%c", $1);}1' file
或者
$ awk 'NF>1{ $1=strftime("%c", $1);}1' file
Monday 22 September 2014 06:54:14 AM IST 08:11:96:e9:52:ec 192.168.1.96 W11837894 *
Tuesday 23 September 2014 12:48:48 AM IST b4:b6:76:0c:c9:4d 192.168.1.46 root-HP-9470m *
Sunday 21 September 2014 07:00:16 AM IST 00:1b:21:0e:f2:bd 192.168.1.219 root-Dell-DM061 *
Monday 22 September 2014 09:10:37 AM IST 00:01:2e:4d:49:bd 192.168.1.31 ata *
Sunday 21 September 2014 07:00:41 AM IST 00:30:67:d2:25:65 192.168.1.51 root-TA75M *
答案2
这个 awk 命令应该可以解决问题,
awk '{if ($1) {$1=strftime("%c",$1); print}}' /var/lib/misc/dnsmasq.leases
旧版本会将 Unix 纪元转储到空行上:
awk '{time=$1; $1=""; print strftime("%c",time) $0}' /var/lib/misc/dnsmasq.leases
诀窍是strftime
只应用相关参数,并按原样打印其他所有内容。我从这里借用了这一点那么问题来了。(由于您的strftime
功能正常工作,我假设您已经gawk
安装。如果没有,请执行sudo apt-get install gawk
。)