awkの行間のタイムスタンプの計算または合計

awkの行間のタイムスタンプの計算または合計

次の入力があります。

1. Track 01 05:21
2. Track 02 07:39   
3. Track 03 04:27

私は次のスクリプトを思いついた。

awk -F: '{a+=$(NF-1)*60+$(NF);printf"%d:%02d:%02d\n",a/3600,a%3600/60,a%3600%60}' file

しかし、私が得た結果は次のとおりです。

0:01:21
0:04:00
0:07:27

その結果、同じスクリプトを使用して時間だけが含まれ、他のものは含まれていないファイルがある場合は正しい出力が得られます。

入力する:

05:21
07:39
04:27

出力:

0:05:21
0:13:00
0:17:27

ベストアンサー1

2つのawkコマンドを使用してください

awk '{print $NF}' file |awk '{a+=$(NF-1)*60+$(NF);printf"%d:%02d:%02d\n",a/3600,a%3600/60,a%3600%60}'

最初の awk はファイルの las フィールドを抽出し、2 番目の awk は目的のプロシージャを生成します。

時間が行の最後のフィールドである限り、ファイルに時間のみが含まれているかどうかに関係なく機能します。

おすすめ記事