淺談awk的基本用法


awk

1.域和記錄:

取第一域,並在開頭和結尾加字符begin和end

通常使用BEGIN來顯示變量和預置變量,使用END來輸出最終結果。

awk  ' BEGIN  {print "being"}  {print $1}  END  {print "end"}'   file

 

2.條件操作符:

第一字域,包含expect,就打印整行

awk '{if($1~/expect/) print $0}' c.sh 或者 awk '$1~/expect/{print $0}' file

 

精確匹配:,只打印第3 域等於"48"的記錄

awk '$3=="48" {print $0}' file 

不等於: awk '$1 != "asima"' temp

 

不匹配: 打印整條不包含ASIMA 的記錄

awk '$0 !~ /ASIMA/' temp 

 

小於: awk '{if ($1<$2) print $1 "is smaller"}' temp

 

設置大小寫: awk '/[Gg]reen/' temp 打印整條包含Green,或者green 的記錄

 

任意字符: awk '$1 ~/^...a/' temp 打印第1 域中第四個字符是a 的記錄,符號’^’

代表行首,符合’.’代表任意字符

 

 

AND 與關系: awk '{if ( $1=="a" && $2=="b" ) print $0}' temp

OR 或關系: awk '{if ($1=="a" || $1=="b") print $0}' temp

 

for循環

awk -F "," '{for (i=1;i<=NF;i++) if($i~/a=/) {print $i}}'

 

3.awk內置變量:

例: awk 'END {print NR}' temp                                          在最后打印已讀記錄條數

      awk '{print NF,NR,$0} END {print FILENAME}' temp

     awk '{if (NR>0 && $4~/Brown/) print $0}' temp          至少存在一條記錄且包含Brown

     NF 的另一用法: echo $PWD | awk -F/ '{print $NF}'      顯示當前目錄名

 

4. awk操作符:

在awk 中使用操作符,基本表達式可以划分成數字型、字符串型、變量型、域及數組元素

 

設置輸入域到變量名:

awk '{name=$1;six=$3; if (six=="man") print name " is " six}' temp

 

域值比較操作:

awk 'BEGIN {BASE="27"} {if ($4<BASE) print $0}' temp

 

修改數值域取值:(原輸入文件不會被改變)

awk '{if ($1=="asima") $6=$6-1;print $1,$6,$7}' temp

 

修改文本域:

awk '{if ($1=="asima") ($1="desc");print $1}' temp

 

只顯示修改記錄:(只顯示所需要的,區別上一條命令,注意{})

awk '{if ($1=="asima") {$1="desc";print$1}}' temp

 

創建新的輸出域:

awk '{$4=$3-$2; print $4}' temp

 

統計列值:

awk '(tot+=$3);END {print tot}' temp 會顯示每列的內容

awk '{(tot+=$3)};END {print tot}' temp 只顯示最后的結果

awk '{total+=$1}END{print total}' a.txt 只顯示最后的結果

 

文件長度相加:

ls -l|awk '/^[^d]/ {print $8"\t"$5} {tot+=$5} END{print "totKB:" tot}'

只列出文件名:ls -l|awk '{print $9}' 常規情況文件名是第8域

 

5.awk打印除了第二列外所有列

cat /etc/passwd|awk -F: '{$2=null;print $0}' 就是把某一列制空

6. awk 打印奇數行和偶數行

awk 'NR%2' b.log 打印奇數行

awk '!(NR%2)' b.log 打印偶數行

7. awk多個分隔符進行摘取列

cat file|awk -F[//\ ] '$9 ~/500/ {print $3,$5,$6,$8}' 分隔符分別為/ / 空格


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM