Bashスクリプトを使用して数値差を計算し、コロンで区切られた時間形式で保存します。

Bashスクリプトを使用して数値差を計算し、コロンで区切られた時間形式で保存します。

たとえば、タブで区切られたファイルがあります。

0018803 01  1710    2050    002571      
0018951 01  1934    2525    003277  
0019362 02  2404    2415    002829  
0019392 01  2621    2820    001924  
0019542 01  2208    2413    003434  
0019583 01  1815    2134    002971   

3列と4列は、HHMM形式の開始時間と終了時間を示します。開始時刻または終了時刻が真夜中を超える場合は、継続時間が追加されます。

私は6列に経過時間を時と分単位で表示したいと思います(4列から3列を引いた値)。

この例では、列6の結果は3:40、、、、、です。5:5100:111:592:05

ベストアンサー1

こんにちは。開始時間と終了時間は常に4文字であるとします。

awk 'NF {hrs = substr($4, 1, 2) - substr($3, 1, 2); min = substr($4, 3, 4) - substr($3, 3, 4); if(min<0) {hrs--; min = 60 + min}; printf "%s\t%02d:%02d\n", $0, hrs, min}'

説明する:

NF:フィールド数、空行をスキップするためのものです。

hrs = substr($4, 1, 2) - substr($3, 1, 2);:列4の最初の2文字を取得し、列3の最初の2文字を減算して変数に割り当てますhrs

min = substr($4, 3, 4) - substr($3, 3, 4);:分の最後の2文字を使用して最後のロジックを繰り返します。

if(min<0) {hrs--; min = 60 + min};:分が負の場合は、時から1を減算し、60に負の数を加えた結果を変数に代入しますmin

printf "%s\t%02d:%02d\n", $0, hrs, min:最後にすべての行と変数を印刷し、hrsゼロminで埋めます。

おすすめ記事