awk小結(jié)

awk

參考 AWK簡明教程|coolshell

文本

cat netstat.txt
Proto Recv-Q Send-Q Local-Address          Foreign-Address             State
tcp        0      0 0.0.0.0:3306           0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:80             0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:9000         0.0.0.0:*                   LISTEN
tcp        0      0 coolshell.cn:80        124.205.5.146:18245         TIME_WAIT
tcp        0      0 coolshell.cn:80        61.140.101.185:37538        FIN_WAIT2
tcp        0      0 coolshell.cn:80        110.194.134.189:1032        ESTABLISHED
tcp        0      0 coolshell.cn:80        123.169.124.111:49809       ESTABLISHED
tcp        0      0 coolshell.cn:80        116.234.127.77:11502        FIN_WAIT2
tcp        0      0 coolshell.cn:80        123.169.124.111:49829       ESTABLISHED
tcp        0      0 coolshell.cn:80        183.60.215.36:36970         TIME_WAIT
tcp        0   4166 coolshell.cn:80        61.148.242.38:30901         ESTABLISHED
tcp        0      1 coolshell.cn:80        124.152.181.209:26825       FIN_WAIT1
tcp        0      0 coolshell.cn:80        110.194.134.189:4796        ESTABLISHED
tcp        0      0 coolshell.cn:80        183.60.212.163:51082        TIME_WAIT
tcp        0      1 coolshell.cn:80        208.115.113.92:50601        LAST_ACK
tcp        0      0 coolshell.cn:80        123.169.124.111:49840       ESTABLISHED
tcp        0      0 coolshell.cn:80        117.136.20.85:50025         FIN_WAIT2
tcp        0      0 :::22                  :::*                        LISTEN

輸出第1列與第4列

# 單引號中的被大括號括著的就是awk語句,只能被單引號包含
# $1...$n表示第幾列,$0表示整行
awk '{print $1, $4}' netstat.txt

格式化

# 和C語言的printf一樣
awk '{printf "%-8s %-8s %-8s %-18s %-22s %-15s\n",$1,$2,$3,$4,$5,$6}' netstat.txt

過濾記錄

awk '$3==0 && $6=="LISTEN"' netstat.txt # 第3列為0,第6列為LISTEN
awk '$3>0 {print $0}' netstat.txt
awk '$3==0 && $6=="LISTEN" || NR==1 ' netstat.txt # NR是內(nèi)建變量
awk '$3==0 && $6=="LISTEN" || NR==1 {printf "%-20s %-20s %s\n",$4,$5,$6}' netstat.txt

# 結(jié)合內(nèi)建變量輸出行號
awk '{printf "%02s %s %-20s %-20s %s\n",NR, FNR, $4,$5,$6}' netstat.txt

內(nèi)建變量

變量 說明
$0 當(dāng)前記錄(這個變量中存放著整個行的內(nèi)容)
$1~$n 當(dāng)前記錄的第n個字段,字段間由FS分隔
FS 輸入字段分隔符 默認(rèn)是空格或Tab
NF 當(dāng)前記錄中的字段個數(shù),就是有多少列
NR 已經(jīng)讀出的記錄數(shù),就是行號,從1開始,如果有多個文件話,這個值也是不斷累加中。
FNR 當(dāng)前記錄數(shù),與NR不同的是,這個值會是各個文件自己的行號
RS 輸入的記錄分隔符, 默認(rèn)為換行符
OFS 輸出字段分隔符, 默認(rèn)也是空格
ORS 輸出的記錄分隔符,默認(rèn)為換行符
FILENAME 當(dāng)前輸入文件的名字

指定分隔符

awk 'BEGIN{FS=":"} {print $1,$3,$6}' /etc/passwd
awk -F: '{print $1,$3,$6}' /etc/passwd
awk -F '[;:]' # 指定多個分隔符
awk -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd # 指定輸出的分隔符

字符串匹配

# 第一個示例匹配FIN狀態(tài), 第二個示例匹配WAIT字樣的狀態(tài)。
# ~ 表示模式開始。/ /中是模式。這就是一個正則表達(dá)式的匹配。
awk '$6 ~ /FIN/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt 
awk '$6 ~ /WAIT/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt

# awk可以像grep一樣的去匹配第一行
awk '/LISTEN/' netstat.txt

# 使用 “/FIN|TIME/” 來匹配 FIN 或者 TIME
awk '$6 ~ /FIN|TIME/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt

# 模式取反
awk '$6 !~ /WAIT/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt
awk '!/WAIT/' netstat.txt
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載 原文的排版和內(nèi)容都更加友好,并且詳細(xì),我只是在這里貼出了一部分留作自己以后參考和學(xué)習(xí),如希望更詳細(xì)了解AWK...
    XKirk閱讀 3,365評論 2 25
  • awk介紹awk變量printf命令:實(shí)現(xiàn)格式化輸出操作符awk patternawk actionawk數(shù)組aw...
    哈嘍別樣閱讀 1,737評論 0 4
  • 本文大部分內(nèi)容翻譯自我開始學(xué)習(xí)AWK時看到的一篇英文文章 AWK Tutorial ,覺得對AWK入門非常有幫助,...
    mylxsw閱讀 1,246評論 0 12
  • awk:報(bào)告生成器,格式化文本輸出 內(nèi)容: awk介紹 awk基本用法 awk變量 awk格式化 awk操作符 a...
    BossHuang閱讀 1,557評論 0 9
  • 懶繡鴛鴦逐水戲,閑玩棋子剪燈花。 難學(xué)經(jīng)律初心靜,不懂歌吹解日遐。 深院幽幽多廖寞,樓臺寂寂少紛嘩。 一別數(shù)載無音...
    不惑而歌閱讀 397評論 12 22

友情鏈接更多精彩內(nèi)容