awk値を変数として保存

awk値を変数として保存

私はコマンドを使用します

varioutput=$(awk '{print $j}' OFS=, data/damper.test_temp1.csv)

、で区切られた行の複数の値のうちj番目の値を抽出したいからです。しかし、$varioutputを使いたいときはいつもフルラインを提供します。

私は何が間違っていましたか?

実際に私が使いたいもの

for ((j=1; j<=20; j++)); do
         varioutput=$(awk -F, -v jj="$j" '{print $jj}'  data/damper.test_temp1.csv)
done

それでは、上記のように使うべきか混乱していますか?エラーが発生しますが、これを使用すると

for ((j=1; j<=20; j++)); do
         varioutput=$(awk -F, '{print $j}'  data/damper.test_temp1.csv)
done

私はまだその言葉を理解しています。

今解決策は次のとおりです

for ((j=1; j<=20; j++)); do
         varioutput=$(awk -F, -v k=$j '{print $k}'  data/damper.test_temp1.csv)
done

ベストアンサー1

入力フィールド区切り文字ではなく、出力フィールド区切り文字を指定しました。代わりに、以下を使用してください。

varioutput=$(awk -F, '{print $j}' data/damper.test_temp1.csv)

(またはFS代わりに設定OFS)。

jまた、上記はプレースホルダであり、それを適切な値(たとえば)に静的に置き換えるとしますprint $4


スクリプトで別の変数を使用するには、その変数を渡す必要があります。awk

たとえば、RANKシェル変数の場合

varioutput=$(awk -F, -v j=$RANK '{print $j}' data/damper.test_temp1.csv)

一般に、この例のように、小さなスクリプトセットにAWKを使用し始める場合は、より多くのスクリプトにAWKを使用することをお勧めします。

おすすめ記事