awkを使用して日付/時刻列と秒列を追加する

awkを使用して日付/時刻列と秒列を追加する

以下のようにcsvファイルがあります。

DateTime                Keywords    CallDuration       CallEndTime
2018-12-18 18:36:55    cars,petrol    120
2018-12-19 15:10:19    diesel          90
2018-12-17 15:10:19    bus             86

DateTime列とCallDuration列を追加し、その合計をCallEndTime列に入れる必要があります。

awkを使ってこれを行うにはどうすればよいですか?

ベストアンサー1

ファイルがタブで区切られているとします。

awk -F$'\t' '
    BEGIN{OFS="\t"}
    NR!=1{
        ("date -Iseconds -d \""$1"\"" | getline startdate)
        ("date \"+%Y-%m-%d %H:%M:%S\" -d \""startdate" + "$3" seconds\"" | getline $4)
    }1' file.csv
  • BEGIN{OFS="\t"}出力フィールド区切り記号をタブに設定します。
  • NR!=1{...}ヘッダーを除くすべての行で括弧内のコマンドを実行します。
    • ("date -Iseconds -d \""$1"\"" | getline startdate)日付を日付コマンドの読みやすい形式に変換し、startdate変数として保存します。
    • ("date \"+%Y-%m-%d %H:%M:%S\" -d \""startdate" + "$3" seconds\"" | getline $4)$3フィールドに秒を追加し、startdateフィールドとして保存します$4
  • 1この行を印刷してください。

ファイルがタブで区切られていない場合は、次のように変更する必要がありますsed -i -r 's/\s\s+/\t/' file.csv

おすすめ記事