ファイルの空の列(フィールド)位置に現在の日付を挿入します。

ファイルの空の列(フィールド)位置に現在の日付を挿入します。

次のように「|」で区切られた4つの列を持つファイルがあります。

23414|test doc for me||
32322|test doc for you|2004_12_03|
13454|test doc for all||2010_11_01

出力が次のように表示されるように、現在のシステム日付を空の列に挿入しようとします。

23414|test doc for me|2018_04_03|2018_04_03
32322|test doc for you|2004_12_03|2018_04_03
13454|test doc for all|2018_04_03|2010_11_01

以下は私が試したコードです

for file in `ls -rlt Added_to_* | awk '{print $9}'`
do
  now="$(date +'%Y/%m/%d')"
  echo "Running for: $file"
  awk -F'|' -v curr="$now" '{ 
    if( $3=="" || $4=="" ){ 
     if ( $3=="" ) { print "$curr"}
     if ( $4=="" ) { print "$curr"}
  }else  
     do_something ; 
  }' $file 
done

ベストアンサー1

まず、ファイルのリストを読み取って処理できるため、出力をまったく解析したり、lsシェルループを使用したりする必要はありません。awk

$curr別の問題は、渡された変数を参照する方法ですcurr$currフィールド番号 curr- そんなことがあったら)。また、フィールドが空であるかどうかを2回テストする必要はありません。

だから

awk -v curr="$now" '
  BEGIN{OFS=FS="|";} {for(i=3;i<=4;i++) {if ($i=="") $i=curr}} {print}
' Added_to_*

おすすめ記事