2013-02-13 70 views
0

我從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或等效?

回答

0

確實有一些障礙在這裏:首先,你基本上必須分開數據,然後其中一部分按原樣顯示,而另一部分必須傳遞到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 
相關問題