awk基礎

awk: 行處理器

awk '/pattern/{command}' file1 file2 ..

print(輸出 打印)
printf(格式化輸出)
%c : 字符
%s : 字符串
%d : 整數
%f : float 浮點型 小數
%10s : 右對齊 10位寬度字符串
%-10s : 左對齊

Record : 記錄 / 每一行
Field : 域

NR : record number : 行號
NF : field nunber : 字段的號 列號
FS : field separator : 分隔符
默認的分隔符是空格 " "
~ 匹配,與==相比不是精確比較
!~ 不匹配,不精確比較
== 等於,必須全部相等,精確比較
!= 不等於,精確比較
&&  邏輯與
|| 邏輯或

  • 匹配時表示1個或1個以上
    /[0-9][0-9]+/ 兩個或兩個以上數字
    /[0-9][0-9]*/ 一個或一個以上數字
    FILENAME 文件名
    OFS 輸出字段分隔符, 默認也是空格,可以改爲製表符等
    ORS 輸出的記錄分隔符,默認爲換行符,即處理結果也是一行一行輸出到屏幕
    -F'[:#/]' 定義三個分隔符

-F : 指定分隔符
awk -F: '{print $0}' /etc/passwd
//指定分隔符爲:,打印整行
awk '{print $0}' awk.txt
//打印整行
awk '{print $1,$3}' awk.txt
//打印第一個字段和第三個字段
awk '{print $NF}' awk.txt
//打印最後一個字段
awk '{print NR,$0}' awk.txt
//打印行號及整行內容
this is a text
$1 $2 $3 $4 $0: 整行

awk -F: '{printf "%-20s%-5d\n",$1,$3}' /etc/passwd
//指定分隔符爲:,格式化輸出第一,三字段(第一字段爲左對齊20個字符串的寬度,第三個字段爲左對齊的5個寬度的整數)
awk '{print FNR,$0}' awk.txt awk2.txt
//以文件內容爲界限,打印行號及整行內容
awk 'BEGIN{FS=":"}{print "Username: ",$1 }END{print "++++++++++++++++++++++++++++"}' /etc/passwd
//標準格式
awk 'BEGIN{X=0}/^$/{X+=1}END{print "I find",X,"blank lines."}' awk2.txt
//BEGIN預處理定義變量X值爲0,每有一個/^$/(空白行),X值加1
awk 'NR==2,NR==6{print NR,$0}' awk2.txt
//打印2到6行的行號及整行內容
awk 'NF==4 {print $0}' awk2.txt
//找出整行內容有且僅有4個字段的行,打印輸出
awk '{if(NF==4)print $0}' awk2.txt
//同上

awk -F: '$1~/nginx|root/' /etc/passwd
//打印第一字段是nginx和root的行

awk -F: '/gdm/,/tcpdump/{print NR,$1,$3}' /etc/passwd
//以:爲分隔符,打印從gdm到tcpdump行的行號,第一字段和第三字段

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章