shell腳本的awk
A. linux shell中awk的用法
這個。。。太多了。如果在這里就能說清楚,那麼其本身功能的強大性就值得質疑。
只能推薦一些電子書(網上都可以找到)和學習鏈接給你:
Unix awk使用手冊(第二版).doc
Awk - An Introction and Tutorial.doc
詳解著名的awk_oneliner.pdf
通用線程: awk 實例:
https://www.ibm.com/developerworks/cn/linux/shell/awk/awk-1/
B. Shell中的awk
樓上的回答很正確!
awk處理文件分記錄(行)和域(列),$1指第一列,$2指第二列,依次類推。
NR指文件的記錄個數即行數。
這應該更明白了吧!
C. shell中awk腳本編寫碰到的問題
寫一個sh文件吧(命名為count.sh)
代碼如下:
cnt=`cat $1 |awk '{if(sunstr($1,2,8)=='$2')print $0;}'|wc -l`
保存運行,需要輸入兩個參數:日誌文件名和日期,記得修改腳本許可權(chmod +x count.sh)
如果需要增加容錯性,可在代碼開頭增加以下判斷
if [ -z "$1" ];then
echo "請輸入日誌名"
exit 0;
fi
if [ -z "$2" ];then
echo "請輸入要判斷的日期"
exit 0;
fi
if [ `echo $2|awk '{printf("%d",length($1));}'` -ne 8 ];then
echo "請輸入正確的日期"$2
exit 0;
fi
D. 用awk時怎麼用-v把shell腳本的命令行參數全部傳給awk
$ awk -v var1=hello -v var2=world 'BEGIN{print var1,var2}'
E. awk中使用$0與shell腳本$1有沖突怎麼辦
用單引號將awk命令括起來,不要用雙引號,在shell中單引號中$不會被解釋成變數,因此在awk腳本單引號中$n就表示awk變數,不會被shell處理
F. awk命令可以執行,在SHELL腳本不能執行。
sh -x yourshell
可以查看執行過程
# sh -x 1
++ cut -d . -f1
++ awk '{pringf $(NF-2)}'
++ uptime
+ a=
+ echo
這里pringf寫錯了應該是printf
[root@iZ259r7h4pfZ ~]# cat 1
a=`uptime|awk '{printf $(NF-2)}' |cut -d . -f1`
echo $a
[root@iZ259r7h4pfZ ~]# sh -x 1
++ cut -d . -f1
++ awk '{printf $(NF-2)}'
++ uptime
+ a=0
+ echo 0
0
G. shell腳本中的awk疑問
前部分的」{(total += $6)}「是個演算法表達式,不會列印任何信息,其意義為每新處理一行數據都會將該行第6個欄位的數據與total變數相加,所以最後total只會是一個確定值。
後半部分」END{print total}「才會列印total這個確定的值。
H. shell 腳本中 awk 無效
sh -x youshell
你看看過程就知道了
ssh 192.168.1.2 "netstat -r|grep default|awk '{print $2}'"
這個$2是需要轉義的
ssh 192.168.1.2 "netstat -r|grep default|awk '{print \$2}'"
這樣就可以了
放到腳本里,需要多次轉義\\\$2,具體看測試過程吧
I. 【Shell腳本】awk中如何使用shell的環境變數
這種寫法大家無需改變用'括起awk程序的習慣,是老外常用的寫法.如: var="test"awk 'BEGIN{print "'$var'"}' 這種寫法其實際是雙括弧變為單括弧的常量,傳遞給了awk. 如果var中含空格,為了shell不把空格作為分格符,便應該如下使用: var="this is a test"awk 'BEGIN{print "'"$var"'"}' 二:'"$var"' 這種寫法與上一種類似.如果變數含空格,則變為'""$var""'較為可靠. 三.把括起awk程序的''變為"",使用"$var"