次のように「|」で区切られた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_*