awk
ループ内でコマンドを試しましたが、成功しませんでしたfor
。
データを取得するために切り取るために使用する一連の文字列を含む変数がありますawk
。
どうすればよいかはわかりますが、私が本当に欲しいのは、データを切り捨て続けることです。
だから私はこの変数を持っています:
var="data1,data2,data3"
私は今ここにいる:
for ((i=1; i<=3; i++))
do
echo $(awk -F, '{print $1}' <<< $var)
done
$1
ループに置き換えようとしましたが、$i
成功しませんでした。
ベストアンサー1
二重引用符を使用してawkスクリプトにシェル変数を挿入すると、必要なものを取得できます。それでもリテラルを維持したい場合は、$
バックスラッシュを使用してエスケープします。
echo $(awk -F, "{print \$$i}" <<<$var)
これは各反復ごとに、およびを拡張するため、$i
awkは、およびを表示し、これによりすべてのフィールドが拡張されます。1
2
3
$1
$2
$3
別の可能性は、次のフラグを使用してシェル変数をawk変数に注入することです-v
。
echo $(awk -F, -v i="$i" '{print $i}' <<<$var)
awk変数の割り当て私同じ名前のシェル変数の内容に。 awkの変数はaを使用せず、フィールド用であるため、$
参照$i
するのに十分です。私- 最初のフィールドの場合私awkの変数です。
awk 変数に値を代入するのは-v
通常、より安全なアプローチです。特に、任意の文字シーケンスを含めることができる場合、コンテンツが意図とは対照的に awk コードで実行されるリスクは少なくなります。しかし、あなたの場合、変数は単一の整数を保持するので、心配しないでください。
for
別のオプションは、awk自体内でループを使用することです。これを行う方法の詳細については、awkのドキュメントを参照するか、このサイトを検索してください。