sed:将表中的时间(3)秒转换为可打印日期(spamdb)

sed:将表中的时间(3)秒转换为可打印日期(spamdb)

问题描述:

我从spamdb获得以下内容,其中第三个字段表示从Epoch开始的秒数。sed:将表中的时间(3)秒转换为可打印日期(spamdb)

Cns# spamdb | fgrep TRAPPED 
TRAPPED|113.163.117.129|1360836903 
TRAPPED|113.171.216.201|1360837481 
TRAPPED|122.177.159.61|1360844596 
TRAPPED|36.231.9.231|1360865649 
TRAPPED|37.146.207.209|1360832096 
TRAPPED|212.156.98.210|1360837015 
TRAPPED|59.99.160.62|1360839785 
TRAPPED|86.127.116.162|1360840492 
TRAPPED|92.83.139.194|1360843056 
TRAPPED|219.71.12.150|1360844704 

我想的时候这个表进行排序,并与date -r打印时间字段,例如它的像样的和明确的,当发生事件。

如何在OpenBSD上的tcsh中执行此操作?

sort排序很容易,编辑sed也很容易;但我如何使sed执行date -r或等效?

确实有一些障碍在这里:首先,你基本上必须分开数据,然后其中一部分按原样显示,而另一部分必须传递到date -r进行日期格式化,呈现给用户。

的另一个障碍是确保输出一致:很显然,这是相当难以处理制表符的外壳,可能只在BSD系统:

另外,由于我们最终将此管道传输至sh以供执行,因此除管道字符|以外的其他字段必须使用不同的分隔符。

到目前为止,这是我能拿出最好的片段,似乎在给工作带来极大的我tcsh

Cns# spamdb | fgrep TRAPPED | sort -n -t '|' -k 3 | sed -E -e 's#\|#@#g' \ 
    -e 's#^([A-Z]+)@([0-9.]+)@([0-9]+)$#"echo -n \2_"; "date -r \3"#g' | \ 
    xargs -n1 sh -c | awk '{gsub("_","\t",$0); print;}' 
37.146.207.209 Thu Feb 14 00:54:56 PST 2013 
113.163.117.129 Thu Feb 14 02:15:03 PST 2013 
212.156.98.210 Thu Feb 14 02:16:55 PST 2013 
113.171.216.201 Thu Feb 14 02:24:41 PST 2013 
59.99.160.62 Thu Feb 14 03:03:05 PST 2013 
86.127.116.162 Thu Feb 14 03:14:52 PST 2013 
92.83.139.194 Thu Feb 14 03:57:36 PST 2013 
122.177.159.61 Thu Feb 14 04:23:16 PST 2013 
219.71.12.150 Thu Feb 14 04:25:04 PST 2013 
36.231.9.231 Thu Feb 14 10:14:09 PST 2013