2

私は次のようなファイルを持っていますSample:-

206,,,206,14.9,0,2012/04/24 00:00:05
206,,,206,14.9,0,2012/04/24 00:00:21
205,,,205,14.9,0,2012/04/24 00:00:23
205,,,205,14.9,0,2012/04/24 00:00:29
207,,,207,14.9,0,2012/04/24 00:00:34
205,,,205,14.9,0,2012/04/24 00:00:40
204,,,204,14.9,0,2012/04/24 00:00:46
202,,,202,14.9,0,2012/04/24 00:00:52
201,,,201,14.9,0,2012/04/24 00:01:00
202,,,202,14.9,0,2012/04/24 00:01:04

そして、次の AWK コマンド:-

awk -F, '{ gsub("/"," ",$7); gsub(":"," ",$7); t+=(mktime($7)-mktime(p)); printf ("%s,%s,%s\n",mktime($7),mktime(p),t); p=$7 }' Sample

次の出力を与える:-

1335222005,-1,1335222006
1335222021,1335222005,1335222022
1335222023,1335222021,1335222024
1335222029,1335222023,1335222030
1335222034,1335222029,1335222035
1335222040,1335222034,1335222041
1335222046,1335222040,1335222047
1335222052,1335222046,1335222053
1335222060,1335222052,1335222061
1335222064,1335222060,1335222065

行ごとに、7 番目の列がエポック日付に変換され、前の行のエポック日付との差が計算されて に追加されtます。

は現在日付ではないため、処理中の最初の行でp、mktime は-1私の数字を捨てて戻ります。

私がやりたいことは、行 1 が処理されている場合、差が 6 であると仮定して、AWK スクリプトに伝えることです。

私が言いたいのは、t6 から始めて、2 行目で、前の行とのエポック秒の差を計算し、tその量だけインクリメントするということです。

4

3 に答える 3

3

1 行目に何か特別なことをする必要があるだけです。

awk -F, '
    {gsub(/[\/:]/," ",$7); this_time = mktime($7)}
    NR != 1 {t += this_time - prev_time; print this_time, prev_time, t}
    {prev_time = this_time}
' << END

入力データが与えられると、これは印刷されます

1335240021 1335240005 16
1335240023 1335240021 18
1335240029 1335240023 24
1335240034 1335240029 29
1335240040 1335240034 35
1335240046 1335240040 41
1335240052 1335240046 47
1335240060 1335240052 55
1335240064 1335240060 59

別の方法として、変数を初期化する便利な方法は awk'f-vオプションを使用することです

awk -v t=6 '... same as before ...'
于 2012-04-25T18:11:44.487 に答える
2

awkブロック内の変数を初期化し、行番号を取得するための 2 つの変数を存在させることができます。どちらもあなたの場合にBEGIN役立ちます。FNRNR

BEGIN { t = 6 }

また

FNR == 1 { t = 6 }
于 2012-04-25T17:48:01.983 に答える
1

BEGINここを参照)を使用すると役立ちますか?これにより、t変数を必要なものに初期化できます。何かのようなもの

  awk -F, 'BEGIN {t=6} { gsub("/"," ",$7); gsub(":"," ",$7); t+=(mktime($7)-mktime(p)); printf ("%s,%s,%s\n",mktime($7),mktime(p),t); p=$7 }' Sample
于 2012-04-25T17:49:45.253 に答える