如何以人类可读的格式制作 DNSMASQ 绑定?

如何以人类可读的格式制作 DNSMASQ 绑定?

我想要设置一个别名或脚本,以便显示 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。)

相关内容