一、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...