たとえば、タブで区切られたファイルがあります。
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:51
00:11
1:59
2: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
で埋めます。