BashスクリプトでCSVファイルの日付を変更する

BashスクリプトでCSVファイルの日付を変更する

現在、次の履歴を含むファイルがあります。

D20211011,S0519,306668,1
D20211004,S1600,306668,1
D20211009,S1604,306668,1
D20211010,S1605,306668,1
D20211006,S1610,306668,1
D20211011,S1611,306668,1

現在の日付があると仮定すると、20211011日付が現在の日付より小さい行にのみ変換を適用し、過去の日付を持つ行を現在の日付に更新する必要があります。

上記の共有例では、2行から5行に変換する必要があります。

D20211004,S1600,306668,1 -> D20211011,S1600,306668,1
D20211009,S1604,306668,1 -> D20211011,S1604,306668,1
D20211010,S1605,306668,1 -> D20211011,S1605,306668,1
D20211006,S1610,306668,1 -> D20211011,S1610,306668,1

ベストアンサー1

あなたの場合、日付がISOスタイルで提供されるという利点があります。つまり、日付を整数値として解釈し、算術演算子(および)を使用して簡単に比較できますが、<正しい順序を生成できます=>

したがって、次のawkプログラムを使用できます。

awk -v cur="20211011" 'BEGIN{FS=OFS=","} {ldate=substr($1,2); if (ldate<cur) $1="D" cur} 1' input.csv

現在の日付はawk変数として定義されますcur。最初は、入力と出力のフィールド区切り文字がに設定されます,。各行について、行の日付は、その行のフィールド 1 から最初の文字を削除することによって決定されます。結果 "整数" が小さい場合、curと の内容を連結してフィールドを上書きします。ルールブロックの外側にある「散らばった」コンテンツのように見えることは、可能な修正を含む現在の行を印刷するように指示します。Dcur1awk

おすすめ記事