一重引用符パラメータで変数を拡張するには?

一重引用符パラメータで変数を拡張するには?

私は以下を試していますが、運がありません。

SORT_BY='-k3,3r -k2,2 -k1,1r'
awk 'NR<4{print $0;next}{print $0 | sort '"${SORT_BY}"' -t"~"}'

いろいろな引用、引用解除などを試しましたが、いつもawkに問題があります。

awk: illegal statement

延長はどのようにしますか>

ベストアンサー1

awkはシェルではありません。sortCプログラムからUNIXツールを直接呼び出せないように、awkから直接UNIXツールを呼び出すことはできません。

これにより、目的の操作が機能します。

SORT_BY='-k3,3r -k2,2 -k1,1r'
awk 'NR<4{print; next} {print | "sort -t\"~\" '"${SORT_BY}"'"}'

しかし、これが良いアイデアかどうかは不明です。

ソートされていない3行のヘッダー行を印刷してから、残りのデータをソートしたい場合はおそらく最良の方法です。 awks 出力区切り文字を設定し、入力区切り文字を同じ文字でソートすることに加えて、ソートから awk を完全に分離し、シェルを生成するために awk を必要とせず、入力を 2 回開く必要がないため、入力がパイプで出てくるかファイルから出ても動作します。

sep='~'
awk -v OFS="$sep" '{print (NR>3), NR, $0}' file |
sort -t "$sep" -k1,1n -k2,2n -k5,5r -k4,4 -k3,3r |
cut -d "$sep" -f3-

おすすめ記事