シェルスクリプトでawkを使用していますが、期待どおりに機能しています。
awk -F'^' 'BEGIN {OFS="^"} {print $1,$2,$3,$4,$5}'
列数を変更する必要がある場合は、$ 6、$ 7、$8を追加してprintステートメントを変更するだけです。
変数でそれを宣言し、awkでその変数を使用する方法はありますか?
columns=8
awk -F'^' 'BEGIN {OFS="^"} {print $1..$columns}'
シェルスクリプトでawkを使用していますが、期待どおりに機能しています。
awk -F'^' 'BEGIN {OFS="^"} {print $1,$2,$3,$4,$5}'
列数を変更する必要がある場合は、$ 6、$ 7、$8を追加してprintステートメントを変更するだけです。
変数でそれを宣言し、awkでその変数を使用する方法はありますか?
columns=8
awk -F'^' 'BEGIN {OFS="^"} {print $1..$columns}'
関数を定義することによってそれを行います。
awk 'function col(s,e){ret="";for(i=s;i<=e;i++){ret=ret" "$i}return ret}{print col(2,6)}'
を使用してシェル変数を指定し、awk -v
すべての列をループできます。
awk -v cols="$columns" '{ for (i=1; i<=cols; i++) printf (i!=cols) ? $i OFS : $i"\n" }' file.txt
いつでもループを使用できfor
ます
{for(i=1;i<=columns;i++)printf("%s ", $i);print '\n'}'
printf
ループの後にとを使用するとprint
、行末に改行が表示されます。
これはあなたの目標を達成するかもしれません:
column=8
awk '{print $'$column'}'
これはあなたのために働くかもしれません:
echo 1 2 3 4 5 6 7 8 9 | awk -vnf=5 '{NF=nf}1'
1 2 3 4 5