新しい日付列を作成するには、毎週累計列を追加します。

新しい日付列を作成するには、毎週累計列を追加します。

次のように、100の日付(dd / mm / yyyy)を含むファイルがあります。

10112017
23012012
01022008

Bashから次の出力を取得するには、この日付に8週間を追加する必要があります。

10112017 05012018
23012012 19032012
01022008 28032008

それはおそらくawkかもしれませんし、pを読むときに始まるかもしれませんが、あなたが望む出力を得ることができないかもしれません。

助けてくれてありがとう。

ベストアンサー1

Perlとモジュールを使用できますTime::Piece

perl -MTime::Piece -MTime::Seconds -lpe '
  $dt = Time::Piece->strptime($_,"%d%m%Y") + 8 * ONE_WEEK; 
  $_ .= $dt->strftime(" %d%m%Y")
' file
10112017 05012018
23012012 19032012
01022008 28032008

またはGNU awk(gawk)とGNUを使用してください。date

gawk -v FIELDWIDTHS='2 2 4' '{
    cmd = sprintf("date +%%d%%m%%Y -d \"%s/%s/%s + 8 weeks\"", $2, $1, $3); 
    cmd |& getline dt; 
    close(cmd)
  } 
  {
    print $0,dt
  }
' file
10112017 05012018
23012012 19032012
01022008 28032008

または(私が一番好きなもの)、ミラー

$ mlr --nidx put -S '$2 = strftime(strptime($1,"%d%m%Y") + 4838400,"%d%m%Y")' file
10112017 05012018
23012012 19032012
01022008 28032008

84838400週は秒単位です(3600 x 24 x 7 x 8)。

おすすめ記事