- 論壇徽章:
- 1
|
本帖最后由 陳卓文 于 2015-12-14 15:45 編輯
(一)直接傳遞
參數(shù)寫(xiě)在輸入文本之前,腳本之后
awk 'Script' var=value inputfile #單個(gè)參數(shù)
awk -f scriptfile var1=value1 var2=value2 inputfile #多個(gè)參數(shù)
缺點(diǎn):命令行參數(shù)的限制是他們?cè)贐EGIN過(guò)程中是不可用的,直到首行輸入完成以后它們才可用。BEGIN是在首行輸入前執(zhí)行。
$ echo | awk 'BEGIN{print n}' n=1
# 此命令打印出空,并沒(méi)有打印1
(二)-v選項(xiàng)
-v 選項(xiàng),指定在任何輸入被讀入前定義參數(shù) #指定執(zhí)行BEGIN前的變量賦值
例子:
awk -v var=value inputfile
$ echo | awk -v n=1 'BEGIN{print n}'
1
(三)系統(tǒng)內(nèi)置變量ARGV數(shù)組
ARGV[N],ARGV[0]為awk,下標(biāo)從1開(kāi)始是輸入的參數(shù)。
例子:
$ echo | awk 'BEGIN{print ARGV[0]}' var1
awk
$ echo | awk 'BEGIN{print ARGV[1]}' var1 var2
var1
$ echo | awk 'BEGIN{print ARGV[2]}' var1 var2
var2
(四)間接引用 \$${VAR}
間接變量引用避免了在一個(gè)內(nèi)嵌awk腳本中引用shell變量的混亂行為
例子:
#!/bin/bash
# 這是" 求文件中指定列的總和" 腳本的另一個(gè)版本,
#+ 這個(gè)腳本可以計(jì)算目標(biāo)文件中指定列( 此列的內(nèi)容必須都是數(shù)字) 的所有數(shù)字的和.
# 這個(gè)腳本使用了間接引用.
ARGS=2
E_WRONGARGS=65
if [ $# -ne "$ARGS" ] # 檢查命令行參數(shù)的個(gè)數(shù)是否合適.
then
echo "Usage: `basename $0` filename column-number"
exit $E_WRONGARGS
fi
filename=$1
column_number=$2 ######使用時(shí)指定計(jì)算列數(shù)######
# awk腳本開(kāi)始.
# ------------------------------------------------
awk " #注意此處使用的是雙引號(hào)而不是單引號(hào)
{ total += \$${column_number} # 間接引用,先將列數(shù)的變量替換得到$N,$N對(duì)應(yīng)awk的列數(shù)
}
END {
print total
}
" "$filename"
# ------------------------------------------------
# awk腳本結(jié)束.
exit 0
另一解決辦法:
awk -v N=$column_number " #傳遞了column_number給N變量到awk中
{ total += \$N # N 先替換為變量$column-number指定數(shù)字,再執(zhí)行$number執(zhí)行列數(shù)
}
END {
print total
}
" "$filename"
# ------------------------------------------------
# awk腳本結(jié)束
小弟在學(xué)習(xí)awk總結(jié)了4個(gè)方法,大家還有其他辦法可以相互討論學(xué)習(xí)!謝謝~ |
|