Bash
如何在單引號參數中擴展變數?
我試圖在沒有運氣的情況下執行以下操作:
SORT_BY='-k3,3r -k2,2 -k1,1r' awk 'NR<4{print $0;next}{print $0 | sort '"${SORT_BY}"' -t"~"}'
我嘗試過各種引號、取消引號等。但是 awk 總是有問題
awk: illegal statement
我該怎麼做擴展>
awk 不是外殼。您不能
sort
直接從 awk 呼叫 UNIX 工具,就像您不能直接從 C 程序呼叫它們一樣。這將使您嘗試執行的操作:
SORT_BY='-k3,3r -k2,2 -k1,1r' awk 'NR<4{print; next} {print | "sort -t\"~\" '"${SORT_BY}"'"}'
但目前還不清楚這是一個好主意。
猜測您要做的是列印 3 個未排序的標題行,然後對其餘數據進行排序,這可能是最好的方法,因為除了設置 awks 輸出分隔符並將輸入分隔符排序為相同字元之外,它完全解耦awk 來自排序,不需要 awk 來生成 shell,並且無論輸入來自管道還是文件都可以工作,因為它不需要打開輸入兩次:
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-