0

spamdbから次の情報を取得します。3番目のフィールドはエポックからの時間を秒単位で表します。

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このテーブルを時間で並べ替え、イベントが発生したときに表示可能で明確になるように、時間フィールドをで出力します。

tcshOpenBSDでこれを行うにはどうすればよいですか?

での並べ替えsortは簡単で、 での編集も簡単sedです。しかし、どうすればsed実行date -rまたは同等のものを作成できますか?

4

1 に答える 1

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
于 2013-02-13T22:16:45.413 に答える