awk 命令專題

fjzcau發表於2015-02-08

--擷取檔案abc.123.log
--一下結果都是abc.123

ls abc.123.log | awk -F'.'  'BEGIN{OFS="."} NF--'
ls abc.123.log | awk -F  .  'BEGIN{OFS="."} NF--' 

echo "abc.123.jpg" | awk -F .   'BEGIN{OFS="."}NF--'
echo "abc.123.jpg" | awk -F'.'  'BEGIN{OFS="."}NF--'
echo "abc.123.jpg" | awk -F"." 'BEGIN{OFS="."}NF--'
echo "abc.123.jpg" | awk -F "." 'BEGIN{OFS="."}NF--'

A=abc.123.jpg
name=${A%.*}

echo $name
abc.123

echo ${A%%.*}
abc

僅去除副檔名的話,其實一個%就行了,非貪婪匹配


--------------------------------------------------------------------------
awk '{}' /etc/passwd
awk '/root/{print $2,$1}'
awk -F: '$1~/root/{print  $1}'     /etc/passwd      第一列匹配root
awk 'BEGIN{a=1;print a}'          輸出1
awk 'BEGIN{a=1;print a,a}'     輸出1 1
awk 'BEGIN{a=1;print a a}'     輸出11
awk 'BEGIN{a=1;print "a"}'     輸出a
awk '{a=1;b=2;print $(a+b)}'<<
awk '/正則/{}  /正則/{}  /正則/{}'          執行多條指令
awk 'BEGIN{OFS=":"}{print $1,$2}'     改變預設輸出的分割符為:,結果為moma:68.5
awk 'BEGIN{FS=":"}{print $1,$2}'          改變預設輸入的分割符為:

printf:格式化輸出
awk '{printf("\n"$0"\n")}'
awk '{printf("%s%s",$1,$2)}'
awk '{printf("%10s",$1)}'          使輸出的字串佔10個寬度,預設靠右對齊
awk '{printf("%-10s",$1)}'          使輸出的字串佔10個寬度,靠左對齊
awk '{printf("%10.3f",3.3333333)}'          使輸出的字串佔10個寬度,,小數點後要三位,靠右對齊
awk '{a=123.456;printf("%d",a)}'          強制轉換為整數,輸出123

傳遞引數:
var=123
awk -v awkvar=$var '{print awkvar}'
awk {print "'$var'"}'

陣列:
不必指明陣列大小,下標可以為任意字串
awk '{user[NR]=$0}END{print user[5]}'
awk '{IP[192.168.1.254]=254;IP[192.168.1.3]=3}END{for(i in IP){print i;print IP[i]}}' score.txt      列印下標不規整的陣列
awk '{IP[$1]++}END{for(i in IP)print IP[i],i}' /etc/httpd/logs/access_log  |  sort -nr          統計日誌中IP訪問數量
awk 'BEGIN{print ENVIRON["USER"]}'          陣列中使用環境變數

函式:
awk 'BEGIN{a=11.22;int(a);print a,int(a)}'          int函式,結果為:11.22 11
a=12313;print length(a)          取字串的長度
awk 'BEGIN{t="hellolinux";r="x";s="hahaha";print sub(r,s,t),t}'     t原字串,r要匹配的字串,替換為s;替換成功返回1,匹配第一次出現
awk 'BEGIN{t="hellolinux";r="x";s="hahaha";print gsub(r,s,t),t}'     t原字串,r要匹配的字串,替換為s;替換成功返回1,全域性匹配
awk 'BEGIN{ while(getline < "/etc/shadow" > 0) ;}'
BEGIN{FS=":";while((getline0)name[$1]=$3}
{for(i in name){if(i==$1)print name[i],$2}}

awk     'BEGIN{
#               a=5
        }
        {      
               if(x~/abc/){          匹配
               }
#               if(a>3){
#                       print $1
#               }
#               grade=(avg>=60)?"Pass":"Fail"
#               while(a>3){
#                       print $1
#               }
                sum=0          
                for(i=2;i<=NF;i++){
                        sum+=$i
                }
                print $1,sum/(NF-1)
        }
        END{}' score.txt

--------------------------------------------------
系統啟動過程:
grub -kernel initrd.img init /etc/inittab /etc/rc.d/rc.sysinit(/lib/module) rc5 rc.local server login /etc/profile
系統關閉過程
~/.bash_logout登出 關閉server killall殺掉程式 關機

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22661144/viewspace-1430654/,如需轉載,請註明出處,否則將追究法律責任。

相關文章