以下のように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
。