如何仅使用最少的 *nix 工具来操作文件中每一行的日期?

如何仅使用最少的 *nix 工具来操作文件中每一行的日期?

http://pastebin.com/raw.php?i=rCLH4r4M
我有一个文本文件:“hogyaza.txt”。
我想将其中的“正常日期”[仅在开始行]转换为 unix 时间。我知道如何“转换”一行:

$ ONELINE='2011-01-24 19:13:19ASDF 01 24 19:13:19 router daemon.info dnsmasq-dhcp[1140]: DHCPDISCOVER(br-lan) 192.168.1.201 00:1b:37:a8:74:f1'; date +%s -d "$(echo $ONELINE | awk -F "ASDF" '{print $1}')"
1295892799
$
但我需要这种格式:
1295892799ASDF 01 24 19:13:19 router daemon.info dnsmasq-dhcp[1140]: DHCPDISCOVER(br-lan) 192.168.1.201 00:1b:37:a8:74:f1
或者更好的格式:
1295892799 19:13:19 router daemon.info dnsmasq-dhcp[1140]: DHCPDISCOVER(br-lan) 192.168.1.201 00:1b:37:a8:74:f1
这是文件:
$ cat hogyaza.txt
2011-01-24 19:13:19ASDF 01 24 19:13:19 router daemon.info dnsmasq-dhcp[1140]: DHCPDISCOVER(br-lan) 192.168.1.201 00:1b:37:a8:74:f1
2011-01-24 19:13:19ASDF 01 24 19:13:19 router daemon.info dnsmasq-dhcp[1140]: DHCPOFFER(br-lan) 192.168.1.201 00:1b:37:a8:74:f1
2011-01-24 19:13:19ASDF 01 24 19:13:19 router daemon.info dnsmasq-dhcp[1140]: DHCPREQUEST(br-lan) 192.168.1.201 00:1b:37:a8:74:f1
2011-01-24 19:13:19ASDF 01 24 19:13:19 router daemon.info dnsmasq-dhcp[1140]: DHCPACK(br-lan) 192.168.1.201 00:1b:37:a8:74:f1
$

有人知道如何将 txt 中的日期(例如:“^2011-01-24 19:13:19”)转换为 unix 格式吗?
谢谢!
ps:openwrt 路由器上需要它,所以没有 perl :((( 闪存上没有空间

答案1

如果您知道如何转换一行,那么一个简单的循环将为您处理所有行:

while read line; do
    orig_date=$(echo "$line" | awk -F "ASDF" '{print $1}')
    new_date=$(date +%s -d "$orig_date")

    echo "$line" | awk -F "ASDF" -vdate=$new_date -vOFS="ASDF" '{$1=date; print}'
done < hogyaza.txt

输出如下:

1295914399ASDF 01 24 19:13:19 router daemon.info dnsmasq-dhcp[1140]: DHCPDISCOVER(br-lan) 192.168.1.201 00:1b:37:a8:74:f1
1295914399ASDF 01 24 19:13:19 router daemon.info dnsmasq-dhcp[1140]: DHCPOFFER(br-lan) 192.168.1.201 00:1b:37:a8:74:f1
1295914399ASDF 01 24 19:13:19 router daemon.info dnsmasq-dhcp[1140]: DHCPREQUEST(br-lan) 192.168.1.201 00:1b:37:a8:74:f1
1295914399ASDF 01 24 19:13:19 router daemon.info dnsmasq-dhcp[1140]: DHCPACK(br-lan) 192.168.1.201 00:1b:37:a8:74:f1

相关内容