awk命令

概述

awk '{pttern + action}' {filename}

parttern表示在AWK總查找的內容,action表示找到內容執時所執行的動作。AWK以文件的一行作爲處理單位。
BEGIN/END

BEGIN/END

BEGIN塊 在處理輸入前會執行一次
END塊在處理完文件之後再執行一次

運算符

賦值運算符   = += -= *= /= %= ^= **=
邏輯與         &&
邏輯或     ||
匹配正則        ~
不匹配正則   |~
加減乘除取餘  +-*/%
一元加減        -+
邏輯非         !
求冪      ^
自增自減     --++
字段引用        $
字符串鏈接符  空格
三目運算        ?:
是否在數組中  in

內置變量

$0         當前記錄
$1-$n      當前記錄的第n個字段
FS          輸入字段分隔符,默認是空格 field split
RS          輸入記錄分隔符,默認是換行符 record split
NF          當前記錄的字段數 number of field
NR          已經讀出的字段數,從1開始 number of record
OFS         輸出字段分隔符,默認是空格
ORS         輸出記錄分隔符,默認是換行

awk正則

實例

  1. 指定多個分隔符
vim test.tst
I am Petter,my numver is 20109
找出Petter 20109

awk -F '[ ,]+' '{print $3 " " $7}' test.txt

Petter 20109

2/統計某個文件夾下文件佔用的字節數

ll | awk 'BEGIN{size=0;} {size=size+$5} END{print "[end]size is",size}'

2.字段分隔符使用

1.FS="\t" 一個或多個Tab分隔
vim tab.txt
ww  CC      TDD

awk 'BEGIN{FS="\t+"}{print $1,$2,$3}' tab.txt

2.FS="[" ":]+" 一個或者多個空格或者:

[root@Gin scripts]# cat recode.txt
Jimmy the Weasel
100 Pleasant Drive
San Francisco,CA 123456

Big Tony
200 Incognito Ave.
Suburbia,WA 64890
[root@Gin scripts]# cat awk.txt
#!/bin/awk
BEGIN {
        FS="\n"
        RS=""
}
{
        print $1","$2","$3
}
[root@Gin scripts]# awk -f awk.txt recode.txt
Jimmy the Weasel,100 Pleasant Drive,San Francisco,CA 123456
Big Tony,200 Incognito Ave.,Suburbia,WA 64890
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章