簡體   English   中英

AWK別名無法打印

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM