Bash

Bash:如何在 .bashrc 中為帶參數的 awk 創建別名

  • March 9, 2015

我正在嘗試在 .bashrc 文件中添加別名,如下所示:

...
alias cutf="_cutf"
...
_cutf() {
  awk 'NR >= $2 && NR <= $3 { print }' < $1
}

(該函式的目標是顯示編號在之間的行的內容 $ 2 and $ 3 用於 $1 文件)

當我在新的 bash 會話中呼叫 cutf 時,我沒有得到任何輸出。

我錯過了什麼嗎?

$ 2 and $ 3 是單引號。Shell 不會用單引號擴展變數,因此它們會被awk. 切換到雙引號:

awk "NR >= $2 && NR <= $3 { print }" < "$1"

請注意,您可以使用

sed -n 'X,Yp' file

其中 X 和 Y 是行號,或者在 Perl 中類似

perl -ne 'print if X .. Y' file

它們都很短,您可能不需要它們的功能。

您不應該讓 shell 擴展您的 awk 語句中的變數。變數如 $ 2 and $ 3 在 awk 中有特殊的含義。

_cutf() {
  awk -v start="$2" -v stop="$3" 'NR >= start && NR <= stop { print }' "$1"
}

或者你可以這樣寫

_cutf() {
  awk 'NR >= start && NR <= stop { print }' start="$2" stop="$3" "$1"
}

引用自:https://unix.stackexchange.com/questions/189029