シェルを使用してcsvファイルに日付/時刻列と時刻列(秒)を追加する

シェルを使用してcsvファイルに日付/時刻列と時刻列(秒)を追加する

ヘッダーが次のような行が多いcsvファイルがあります。

   DateTime,CallEndTime,KeywordTagTexts,TotalDuration

タイトルキーの位置が変わり、sedを使用して位置を計算しました。

duration=$(sed -n $'1s/,/\\\n/gp' rawfile.csv | grep -nx 'TotalDuration' | cut -d: -f1);
callend=$(sed -n $'1s/,/\\\n/gp' rawfile.csv | grep -nx 'CallEndTime' | cut -d: -f1);
callstart=$(sed -n $'1s/,/\\\n/gp' rawfile.csv | grep -nx 'DateTime' | cut -d: -f1);

DateTimeの値は日付/時刻形式で「2018-12-18 18:36:55」で、TotalDurationの単位は秒です。

CallEndTimeにDateTime + TotalDuration値を追加したいです。

ベストアンサー1

アイデアは最初にepoch時間(1970-01-01 00:00:00 UTC以降の秒数)に変換し、期間を追加して最後に前の表現に戻すことです。

DateTime_epoch_time=$(date +%s -d $DateTime) 
CallEndTime_epoch_time=$(("$DateTime_epoch_time" + $TotalDuration))
CallEndTime=$(date '+%Y-%m-%d %H:%M:%S' -d @$CallEndTime_epoch_time)

または1行で:

date '+%Y-%m-%d %H:%M:%S' -d @$(($(date +%s -d "$DateTime") + $TotalDuration))

日付形式の操作の詳細については、次を参照してください。承認する

おすすめ記事