2017-10-16 10 views
0

変数をawkに渡す方法はわかっていますが、CSVを扱うときに列番号機能と組み合わせることはできませんでした。私はまた、この方法で文字列の連結を実行する方法もわかりません。awkは変数番号の既存のCSV列を追加します

私はMM-dd-yyyyまたはyyyy/MM/dd形式で日付を含むために私のCSVで一部の列を期待し、またはそれらのいくつかの並べ替え、およびその上にデフォルトhh:mm:ssを追加したいと思いますので、1/10/2017の列は1/10/2017 00:00:00なっています。私はawkでこれらの行に沿って何かをしようとしましたが、私が参照しようとしている列を認識していないようです。そして、私はこれが文字列連結がどのように行われているとは思わない。

for file in *.csv; do 
    headline=$(head -n 1 $file) 
    byline=$(sed '2q;d' $file) 
    IFS=', ' read -r -a headers <<< $headline 
    IFS=', ' read -r -a entries <<< $byline 

    for i in "${!headers[@]}"; do         
    date='^[0-9]+[/-][0-9]+[/-][0-9]+$' 

    if [[ ${entries[$i]} =~ $date ]] ; then     
     awk -F, -v col='$i' '{$($col)+="00:00:00";}1' OFS=, $file 
    fi 
    done 
done 
+0

ていますが、実際には方法がわからない:

データを知らなくても、私はあなたが次のようにあなたのawkコマンドを置き換えることにより、探しているものを手に入れる必要があることを前提としシェル変数をawkに渡す:一重引用符を使用すると、変数の置換が妨げられます。 –

答えて

1

入力データの再現性の低い例を提示した場合、あなたの質問に答える方が簡単です。

awk -v col=$(($i + 1)) 'BEGIN{FS=", "} {print $col " 00:00:00"}' "$file" 
あなたにこれを破ることは申し訳ありません
関連する問題