awk常用命令

2021-05-27 14:07:24 字數 3845 閱讀 5560

awk命令詳解

2023年03月31日 星期二 22:22

awk指令詳解

1. 命令簡述:

awk將每個輸入行識別成一條記錄,而將那一行上的每個單詞域識別成乙個字段

2. 命令選項:

-f                指定分隔符

nf                單行最後乙個分段

nr                行數

&& 等同 and       語句兩邊必須同時匹配為真

|| 等同 or        語句兩邊同時或其中一邊匹配為真。

!                 求逆

argc              支援命令列中傳入awk指令碼的引數個數。

argvargc          引數排列陣列,其中每一元素表示為argv[n],n為期望訪問的命令列引數。

environ           支援系統設定的環境變數,例如environ[「editor」] =「vi」

filename          支援a w k指令碼實際操作的輸入檔案

fnr               支援a w k目前操作的記錄數。其變數值小於等於n r。

fs                用來在a w k中設定域分隔符,與命令列中- f選項功能相同,例:f s = ","

nf                支援記錄域個數,在記錄被讀之後再設定

ofs               允許指定輸出域分隔符,預設為空格。如果想設定為#,寫入o f s = " # "

ors               為輸出記錄分隔符,預設為新行( \ n)

rs                記錄分隔符,預設為新行( \ n )

gsub(r,s)         在整個$ 0中用s替代r,r為原內容,s為新內容,r可為/正則/

gsub(r,s,t)      在整個t中用s替代r, r為原內容,s為新內容,r可為/正則/

index(s,t)        返回s中字串t的第一位置

length(s)         返回s長度

match(s,r)        測試s是否包含匹配r的字串

split(s,a,fs)     以fs為分隔符將s分成序列陣列a

sprint(fmt,exp)   返回經f m t格式化後的e x p

sub(r,s)          將$ 0第乙個r替換為s ,r可為/正則/

sub(r,s,t)        將域t中的第乙個r替換為s ,r可為/正則/

substr(s,p)       返回字串s中從p開始的字尾部分

substr(s,p,n)     返回字串s中從p開始長度為n的字尾部分

rand()            產生0到1之間的符點小數

printf()

-        左對齊

width    域的步長,用0表示0步長

. prec   最大字串長度,或小數點右邊的位數

%c       ascii字元

%d       整數

%e       浮點數,科學記數法

%f       浮點數,例如(1 2 3 . 4 4)

%g       awk決定使用哪種浮點數轉換e或者f

%o       八進位制數

%s       字串

%x       十六進製制數

3. 引用檔案list.txt:

54786542:13744232156

360565687:15026736523

360565687:13597572727

100000:13898754555

100000:13898754555

1510121:155554215544:ttta

baoping 207

1986 2009

1986 2007

baoping 2007

malist

dj121m112d12nmm

tete

4. 例項說明:

awk '/^/' list.txt 匹配包含^的行,即顯示全文

awk '/$/' list.txt 匹配包含$的行,即顯示全文

awk '/./' list.txt 匹配包含^的行,即顯示全文

awk '/.*/' list.txt 匹配包含任意字元的行,即顯示全文

awk '' list.txt 顯示list.txt中每行第一串字串

awk '/m/' list.txt 顯示包含字元m所有的行

awk '/m/ ' list.txt 顯示包含m的行的第一串字串

awk '/m/ ' list.txt 匹配包含m前面新增顯示tt空格

awk -f, '' list.txt 逗號為分隔符,無第二串則換行

awk '' list.txt 顯示預設分隔符最後乙個分段$數置

awk '' list.txt 顯示最後一分段的值

awk 'end' list.txt 統計文字內容行數

awk -f: '' list.txt 匹配第二域,並顯示該記錄

awk '$0!~/15026736523/' list.txt 不匹配並顯示該記錄

awk '$0 ~ /15026736523/ ' list.txt 匹配手機號,並顯示該記錄

awk -f: '$2=="15026736523" ' list.txt 精確匹配$2的值

awk -f: '' list.txt 精確匹配$2的值

awk -f: '' list.txt 判斷$1小於$2的記錄並print

awk '/[mm].*/' list.txt 匹配m.*或者m.*

awk -f: '$1 ~ /^…i/ 'list.txt 匹配第四個字元為i的行並顯示

awk -f: '$1 ~ /(360|332)/ 'list.txt 匹配360和332的行.效果同

awk -f: '$1=="360565687" && $2=="15026736523"' list.txt 同時要符合條件,交集

awk -f: '' list.txt 匹配任何乙個,並集

awk '' list.txt 匹配if條件

awk 'begin ;end ' test

375.42

2.對符合某些條件的行,按列求和

[linux@test /tmp]$ cat test

aaa 123.52

bbb 125.54

aaa 123.52

aaa 123.52

ccc 126.36

對檔案test中 第一列為aaa的行求和

[linux@test /tmp]$ awk '/aaa/ ;end ' test

370.56

awk 處理文字還是很方便的。 

# cat lastlog 

1008520650 天津 0.015

1008522118 天津 0.015

1008520646 天津 0.015

1999853994 瀋陽 0.015

1008520650 天津 0.015

1008522118 天津 0.018

1008520646 天津 http://adadad/dad/dd.abc 0.016

1999853994 瀋陽 1.14

# cat lastlog|grep "天津"|awk '' |awk ';end'

0.094

我的nf是最後乙個字段

#awk '/天津/;end ' lastlog

awk常用命令

1 列印檔案的第一列 域 awk filename 2 列印檔案的前兩列 域 awk filename 3 列印完第一列,然後列印第二列 awk filename 5 列印文字第一行 awk nr 1 filename 6 列印文字第二行第一列 sed n 2,1p filename awk pri...

awk常用命令

awk 用法 awk pattern 變數名 含義 argc 命令列變元個數 argv 命令列變元陣列 filename 當前輸入檔名 fnr 當前檔案中的記錄號 fs 輸入域分隔符,預設為乙個空格 rs 輸入記錄分隔符 nf 當前記錄裡域個數 nr 到目前為止記錄數 ofs 輸出域分隔符 ors ...

awk常用命令

提取兩個檔案第一列相同的行 awk f nr fnrnr fnr 1.log 2.log awk nr fnrnr fnr a 1 1 111.txt 111.txt awk a 1 1 cat 111.txt awk f 111.txt awk 按某個位置的字元分隔的方法 awk f awk f ...