[英]AWK alias not printing
下面的awk命令(從stackoverflow復制和粘貼)可以從命令行正常運行,但在使用別名時不顯示任何內容
awk '/WORD/ {print $3}' log.log | awk 'BEGIN{c=0} length($0){a[c]=$0;c++}END{p5=(c/100*5); p5=p5%1?int(p5)+1:p5; print a[c-p5-1]}'
alias getperc="awk '/WORD/ {print \$3}' log.log | awk 'BEGIN{c=0} length(\$0){a[c]=$0;c++}END{p5=(c/100*5); p5=p5%1?int(p5)+1:p5; print a[c-p5-1]}'"
我對使用bash相當陌生。 我在這里想念什么?
不要使用別名。 它們需要附加的引號層,這很麻煩(如此處所示),並且它們使您無法對參數進行有效的參數化或添加條件邏輯。
對函數的簡單音譯為:
getperc() { awk '/WORD/ {print $3}' log.log | awk 'BEGIN{c=0} length($0){a[c]=$0;c++}END{p5=(c/100*5); p5=p5%1?int(p5)+1:p5; print a[c-p5-1]}'; }
功能log.log
,默認情況下仍將使用log.log
,但也可以讓您提供備用輸入文件名(如getperc alternate.log
)或通過管道傳遞給函數(如cat alternate.log | getperc
):
getperc() {
[[ -t 0 || $1 ]] || set -- - # use "-" (stdin) as input file if not a TTY
# ...this will let you pipe to your function.
awk '/WORD/ {print $3}' "${1:-log.log}" | awk 'BEGIN{c=0} length($0){a[c]=$0;c++}END{p5=(c/100*5); p5=p5%1?int(p5)+1:p5; print a[c-p5-1]}'
}
我認為bash對於$ 3和$ 0感到困惑,它認為它們是別名的參數。 您可以通過在bash中嘗試此操作來驗證這一點
alias ech="echo {print \$3}"
它只會打印
{打印}
但是現在嘗試
alias ech="echo {print \$\3}"
它將打印您期望的
{打印$ 3}
讓我知道這是否解決了您的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.