Linux AWK命令用法

2021-09-11 13:56:29 字數 4322 閱讀 3723

一、awk是乙個非常強大的文字處理命令。

二、命令格式如下:

awk [-f|-f|-v] 『begin{} // end{}』 file

[-f|-f|-v] 大引數,-f指定分隔符,-f呼叫指令碼,-v定義變數 var=value

' ' 引用**塊

begin 初始化**塊,在對每一行進行處理之前,初始化**,主要是引用全域性變數,設定fs分隔符

// 匹配**塊,可以是字串或正規表示式

{} 命令**塊,包含一條或多條命令

; 多條命令使用分號分隔

end 結尾**塊,在對每一行進行處理之後再執行的**塊,主要是進行最終計算或輸出結尾摘要資訊

三、重要符號的說明:

特殊要點:

$0 表示整個當前行

$1 每行第乙個字段

nf 字段數量變數

nr 每行的記錄號,多檔案記錄遞增

fnr 與nr類似,不過多檔案記錄不遞增,每個檔案都從1開始

\t 製表符

\n 換行符

fs begin時定義分隔符

rs 輸入的記錄分隔符, 預設為換行符(即文字是按一行一行輸入)

~ 匹配,與==相比不是精確比較

!~ 不匹配,不精確比較

== 等於,必須全部相等,精確比較

!= 不等於,精確比較

&&  邏輯與

|| 邏輯或

+ 匹配時表示1個或1個以上

/[0-9][0-9]+/ 兩個或兩個以上數字

/[0-9][0-9]*/ 乙個或乙個以上數字

filename 檔名

ofs 輸出字段分隔符, 預設也是空格,可以改為製表符等

ors 輸出的記錄分隔符,預設為換行符,即處理結果也是一行一行輸出到螢幕

-f'[:#/]' 定義三個分隔符

四、使用案例:

1、定義變數aa

# aa="hello:world:ni:hao:ma"

2、將變數內容匯入到檔案中

# echo $aa>/u03/test.log

3、開啟/u03/test.log檔案,將裡面的內容多複製/貼上幾行

4、檢視每行有多少個字段

# awk -f ":" '' /u03/test.log

其中,-f ":"表示指定分隔符為":",''表示每行字段數量變數,/u03/test.log表示目標檔案

# awk -f ":" '' /u03/test.log

5 -----結果為5個字段

5、檢視檔案/u03/test.log的全部內容

# awk -f ":" '' /u03/test.log

hello:world:ni:hao:ma

hello:world:ni:hao:ma

hello:world:ni:hao:ma

hello:world:ni:hao:ma

hello:world:ni:hao:ma

hello:world:ni:hao:ma

hello:world:ni:hao:ma

6、檢視每行的第乙個字段

[root@source ~]# awk -f ":" '' /u03/test.log

hello

hello

hello

hello

hello

hello

hello

7、檢視每行的記錄號

# awk -f ":" '' /u03/test.log12

3456

78910

11

五、關於awk中的print

print 是awk列印指定內容的主要命令

1、awk中print與$0是等價的

# awk '' /u03/test.log 或者寫成:awk -f ":" '' /u03/test.log

hello:world:ni:hao:ma

hello:world:ni:hao:ma

hello:world:ni:hao:ma

hello:world:ni:hao:ma

hello:world:ni:hao:ma

hello:world:ni:hao:ma

hello:world:ni:hao:ma

# awk -f ":" '' /u03/test.log

hello:world:ni:hao:ma

hello:world:ni:hao:ma

hello:world:ni:hao:ma

hello:world:ni:hao:ma

hello:world:ni:hao:ma

hello:world:ni:hao:ma

hello:world:ni:hao:ma

2、輸出第乙個字段

# awk -f ":" '' /u03/test.log

hello

hello

hello

hello

hello

hello

hello

3、輸出第1、2、3個字段(換行了)

[root@source ~]# awk -f ":" '' /u03/test.log

hello

world

nihello

world

nihello

world

nihello

world

nihello

world

nihello

world

nihello

world

ni4、輸出第1、2、3個字段,以製表符作為分隔符

# awk -f: '' ofs="\t" /u03/test.log

hello world ni

hello world ni

hello world ni

hello world ni

hello world ni

hello world ni

hello world ni

5、將每行內容替換為字母a

# awk -f ":" '' /u03/test.logaa

aaaa

aaaa

a

六、awk引數-f指定指令碼檔案

# touch test.awk

# vim test.awk 

begin

執行命令:# awk -f /u03/test.awk /u03/test.log  

效果與awk -f ":" '' 相同, /u03/test.log只是分隔符使用fs在**自身中指定

2、統計test檔案中的空行

test檔案內容如下:

# cat test

hello:world:me

how:are:you

ni:x:ma:***x

xx:yx

執行命令:

# awk 'begin /^$/ end' test

i find 3 blank lines.

3、計算/u03目錄下檔案的總大小

# pwd

/u03

# ls -la

total 24

drwxrwxr-x. 2 oracle oinstall 4096 feb 28 11:20 .

dr-xr-xr-x. 30 root root 4096 feb 28 09:30 ..

-rw-r--r--. 1 root root 49 feb 28 11:20 test

-rw-r--r--. 1 root root 67 feb 28 11:06 test1.awk

-rw-r--r--. 1 root root 27 feb 28 10:59 test.awk

-rw-r--r--. 1 root root 158 feb 28 10:30 test.log

執行命令:

# ls -l|awk 'begin !/^d/ end'

total size is 301

linux awk 命令常見用法

在 linux 系統中,有三個強大的文字分析處理工具 grep sed awk,其中 grep 用於搜尋文字內容 linux grep 命令常見用法 sed 用於編輯文字內容 linux sed 命令常見用法 awk 用於處理和生成報表 linux awk 命令常見用法 awk 的工作原理是將檔案內...

Linux awk命令列用法

awk是處理文字檔案的乙個應用程式,幾乎所有 linux 系統都自帶這個程式。它依次處理檔案的每一行,並讀取裡面的每乙個字段。對於日誌 csv 那樣的每行格式相同的文字檔案,awk可能是最方便的工具。awk其實不僅僅是工具軟體,還是一種程式語言。不過,本文只介紹它的命令列用法,對於大多數場合,應該足...

Linux awk命令詳解

3.awk的執行過程 1 awk script的組成 awk script可以由一條或多條awk cmd組成,兩條awk cmd之間一般以newline分隔 awk cmd由兩部分組成 awk pattern awk script可以被分成多行書寫,必須確保整個awk script被單引號括起來。2...