時間列を現在の時刻に置き換える

時間列を現在の時刻に置き換える

ports.csv ファイルには次のデータがあります。

ファイル名はポータル.csv

ip,time,name
1.1.1.1,2018-08-15 11:05:28:268813353,1.13.0-0007
1.1.1.2,2018-08-16 11:05:32:016469121,1.13.0-0007
1.1.1.3,2018-08-16 11:06:42:316469121,1.13.0-0007
1.1.2.5,2018-08-16 11:15:52:416469121,1.13.0-0007

これらの出力が必要です。時間列データは現在の時間を使用する必要があり、各行に異なる秒数が必要です。

ip,time,name
1.1.1.1,2018-08-17 15:00:01,1.13.0-0007
1.1.1.2,2018-08-17 15:00:02,1.13.0-0007
1.1.1.3,2018-08-17 15:00:03,1.13.0-0007
1.1.2.5,2018-08-17 15:00:04,1.13.0-0007

ベストアンサー1

NR以下は、コマンドで渡されるepochタイムスタンプを増やすためにGNU Awkを使用するオプションですdate

gawk -F, -v ts="$(date +%s)" '
  BEGIN{OFS = FS} 
  NR > 1 {$2 = strftime("%Y-%m-%d %H:%M:%S", ts + NR - 1)}
1' portals.csv
ip,time,name
1.1.1.1,2018-08-17 09:47:17,1.13.0-0007
1.1.1.2,2018-08-17 09:47:18,1.13.0-0007
1.1.1.3,2018-08-17 09:47:19,1.13.0-0007
1.1.2.5,2018-08-17 09:47:20,1.13.0-0007

バラよりGNU Awkユーザーガイド:時間関数


Perlでも同様の方法:

perl -MPOSIX -F, -lne '
  BEGIN{$ts = time()};
  $F[1] = strftime("%Y-%m-%d %H:%M:%S", localtime($ts + $. - 1)) if $. > 1; 
  print join ",", @F
' portals.csv 

おすすめ記事