AWK 講義 練習

2022-08-24 06:27:10 字數 4201 閱讀 5341

顯示行的所有內容 $0

awk '' /etc/passwd
顯示hello world (前面的金額echo 控制了 輸出1行 與內容無關)
echo asdf |awk ''
顯示多行hello world (檔案內有幾行 就顯示幾行hello world 檔案控制了輸出的行數)
awk '' /etc/passwd
使用分隔符
awk 'begin' /etc/passwd
使用分隔符(功能一樣)
awk -f":" '' /etc/passwd
使用製表符和字串
awk -f":" '' /etc/passwd
通常,對於每個輸入行,awk 都會執行每個指令碼**塊一次。然而,在許多程式設計情況中,

可能需要在 awk 開始處理輸入檔案中的文字之前執行初始化**。對於這種情況,awk 允許

您定義乙個 begin 塊。我們在前乙個示例中使用了 begin 塊。因為 awk 在開始處理輸入文

件之前會執行 begin 塊,因此它是初始化 fs(字段分隔符)變數、列印頁首或初始化其它

在程式中以後會引用的全域性變數的極佳位置。

awk 還提供了另乙個特殊塊,叫作 end 塊。awk 在處理了輸入檔案中的所有行之後執行

這個塊。通常,end 塊用於執行最終計算或列印應該出現在輸出流結尾的摘要資訊。

awk 'begin' #10
邏輯運算子
awk 'begin}'
算數運算子
說明,所有用作算術運算子 進行操作,運算元自動轉為數值,所有非數值都變為 0

awk 'begin'	#0 2

awk 'begin' #12

三目運算子
awk 'begin' #a is b
變數名

屬性$0

當前記錄(當前行)

$1-$n

字段序號(分隔符做出的分隔是乙個字段)

fs輸入欄位的分隔符 一般在begin塊裡 ,也可以使用 awk -f"" 指定分隔符

rs輸入記錄的分隔符 ,預設是回車

nf當前記錄的字段個數 就是有多少列

nr已經讀出的記錄數目 也就是行號 從1開始

fnr針對兩個檔案,顯示兩個檔案時,將2個檔案的行號分開

ofs輸出字段分隔符 預設是 空格

ors輸出記錄的分隔符, 預設是 換行符

-v引用awk內部變數 例如在''外部指定 ofs

查詢oldboy執行的程式並結束

ps -ef|awk '$1=="oldboy"'|xargs kill -9
指定分隔符fs
awk 'begin'  /etc/passwd	#指定分隔符為 : ,然後讀取列

awk 'begin' /etc/passwd #分隔符為乙個或多個 空格

記錄數量nr
ifconfig eth0|awk 'nr==2'	#ip位址
字段數量nf
awk 'begin' /etc/passwd #檢視乙個欄位有幾列 (之前用fs 制定了字段分隔符)

awk -f ":" 'nf==8' /etc/passwd #當乙個欄位有8列的時候輸出整行

記錄分隔符rs
awk 'begin' /etc/passwd #把所有:替換成回車
指定字段分隔符ofs
awk 'begin ' /etc/passwd

#輸出 root#x#0

bin#x#1

daemon#x#2

adm#x#3

lp#x#4

sync#x#5

shutdown#x#6

指定記錄分隔符ors
awk 'begin' /etc/passwd	#把預設的回車替換成了製表符
外部引用內部變數
awk -f -vofs=":" 『』 /etc/passwd

awk '/reg/' filename #reg是正規表示式 可以將$0中 滿足條件的記錄送到:action中處理
在記錄中搜尋乙個字段
awk '/root/' /etc/passwd	#搜尋*root* 在記錄中
輸出第5條記錄中包含root的字段
awk -f: '$5~/root/' /etc/passwd
布林表示式
awk 'bool' filename // bool?action:pass

awk 'begin$1=="root"' /etc/passwd	#如果 第乙個欄位是 root 則輸出
比較表示式
awk '$3>30' /etc/passwd
復合用法
awk -f: '$1=="root"||$4==0' /etc/passwd
awk -f: '}' /etc/passwd
awk 提供的非常類似c語言的if語句

使用awk檢測每個型別的使用者有幾個

使用awk 批量刪除 使用者

建立不同日期的檔案

awk的while迴圈結構 等同於 c語言的 while 迴圈 . awk 還設有 do while 結構

while 迴圈

while	#想要執行**就先要滿足while條件

do while #無論滿不滿足 , 第一次的 do 都是可以執行的

continue #跳過此次迴圈 執行下次迴圈

break #跳出所有迴圈 直接結束迴圈

例子

for 迴圈

for 迴圈需要三個引數

for(初始化條件[執行一次];判斷條件[執行迴圈的次數];判斷成功後執行的語句[執行迴圈的次數])

執行順序: 1,2,3,{},2,3,{},2,3,{},2,3,{}....[直到不滿足條件2,跳出迴圈 執行{}下面的**]

例子

(一共迴圈0~99 ,100次迴圈)

awk中的陣列都是關聯陣列,數字索引也會轉變為字串索引

#exit

}

for..in 輸出,因為數字是關聯屬組,預設是無序的,所以通過 下標取得有序屬組

awk 例項練習(一)

前一篇學習了awk的基本知識,現在來做一些練習加深一下印象。假設我們有這樣乙個待處理的檔案 grade.txt m.tansley 05 99 48311 green 8 40 44 j.lulu 06 99 48317 green 9 24 26 p.bunny 02 99 48 yellow 1...

awk 例項練習(一)

前一篇學習了awk的基本知識,現在來做一些練習加深一下印象。假設我們有這樣乙個待處理的檔案 grade.txt m.tansley 05 99 48311 green 8 40 44 j.lulu 06 99 48317 green 9 24 26 p.bunny 02 99 48 yellow 1...

awk 例項練習(一)

前一篇學習了awk的基本知識,現在來做一些練習加深一下印象。假設我們有這樣乙個待處理的檔案 grade.txt m.tansley 05 99 48311 green 8 40 44 j.lulu 06 99 48317 green 9 24 26 p.bunny 02 99 48 yellow 1...