私はコマンドを使用します
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を使用することをお勧めします。