,
次のコマンドで区切られた列2の視差を取得したいと思います。デフォルトでは、最初の列は正常に機能します。
テーブル:
20220505,12:00:12,user,dept
20220505,12:00:25,user,dept
20220505,12:00:32,user,dept
注文する:
awk -F: '{t=$1*3600+$2*60+$3} NR>1{printf( "%.6f\n", t-p)}{p=t}' inputfile
試しましたが、正しい結果が得られませんでした。
awk -F ',' $2 '{t=$1*3600+$2*60+$3} NR>1{printf( "%.6f\n", t-p)}{p=t}' inputfile
ベストアンサー1
awkに使用するように教えてください両方 ,
そして、:
フィールド区切り記号として使用されます。これにより、フィールド番号が変更されます(2つのフィールド区切り文字が各入力行に適用されるため)。たとえば、
$ awk -F '[:,]' '{ t = $2*3600 + $3*60 + $4 }
NR > 1 { printf "%.6f\n", t-p }
{ p=t }' inputfile
13.000000
7.000000
これは、異なる日付間の視差を計算しないことに注意してください。これを行うには、結合された日付と時刻を単一のtime_t
値(つまり、新起源(1970年1月1日の真夜中)以降の秒数)に解析する必要があります。例えば、牛に似た一種の栄養awk、次のmktime()
機能を使用します。
$ awk -F '[:,]' '{
# extract the year, month, and day from the first field
y = substr($1,1,4);
m = substr($1,5,2);
d = substr($1,7,2);
# create a space-separated datespec string, combining y,m,d with
# hours, minutes, and seconds from fields 2, 3, and 4
datespec = y " " m " " d " " $2 " " $3 " " $4;
# convert it to seconds since the epoch
t = mktime(datespec)
}
NR > 1 { printf "%.6f\n", t-p }
{ p=t }' inputfile
13.000000
7.000000
この機能の仕組みの概要を実行してman awk
検索してください。mktime