awk的總結

Mr_zxw發表於2018-10-29

入門總結

Awk簡介

awk不僅僅時linux系統中的一個命令,而且是一種程式語言,可以用來處理資料生成報告。處理的資料可以是一個多個檔案,可以是來自標準輸入,也可以通過管道獲取標準輸入,awk可以在命令列上直接編輯命令進行操作,也可以編寫成awk程式來進行更為複雜的運用。

檢視awk的版本

awk –version

 

單引號‘{  }{ }外面是模式(條件) 你想要幹什麼,相當於篩選 ,或者過濾

類似於sed命令

單引號{  }裡面是動作先執行模式,後執行動作

 

Awk格式

先進行冒號的切割成一列一列的,然後在進行條件,相當於是篩選;篩選到第四行的時候匹配到了條件,然後在從第三行到第八行裡面進行動作動作為$1時候,顯示4,5,6,7行的第1列內容

 

引數-F

Awk 有引數-F 可以指定awk按照什麼符號切割檔案內容,資原始檔內容切割成一列一列的

Awk 不指定-F引數,awk預設按照空格進行文字的切割。{  }中的print代表輸出的意思

$代表取列  $1就是取第一列,以此類推

 

以:號作為列 ,然後輸出第七列的內容

 

輸出第一列內容

 

 

 

 

預設以空格當列,因為檔案裡面沒有空格符號,所以沒有第二列內容

 

$0:預設輸出全部內容

 

NF:預設取每行的最後一組的元素,

 

“[   ]”中括號裡面是正則 可以多用符號

+號:貪婪模式能匹配多就不匹配少

 

 

 

 

 

Awk –F 引數 ‘BEGIN(開始模組){}模式 {動作}END(結束模組){}’

BEGIN開始模組:告訴awk資料要如何讀

通過-F我們可以指定分隔符

我們都知道換行符是

NR這個符號其實真正的含義不是行號。而是資料被讀取一段以後,NR就會記錄一次。由於awk預設以
作為每次讀資料的結束標誌;因此NR就恰好等於行號了。

 

假如我們修改awk預設的讀資料的時候的預設換行符=== > 讀入換行符

 

我們可以通過BEGIN模組,在awk讀取資料之前設定他的讀入換行符是誰

 

預設awk讀入換行符合輸出換行符都是

 

修改讀入換行符

應為我們設定了讀入換行符RS=“:”

因此,在awk的記憶體裡的資料是按照如下排列

1 root  2x  3 0  4 0  5 root  6 /root  7/bin/bash
bin   8 x  9 1  10 1 

 

由於awk預設輸出換行符是
,因此在輸出的時候awk會在記憶體的行的每行結尾附加輸出換行符號
,
因此輸出是效果如下:

1 root  2 x  3 0  4 0   5 root  6 /root  7 bin/bash  bin  8 x  91   10 1

輸入換行符

 

※NR:代表的是記錄符,記錄偶從那個行,他是個變數值(相當於讀了多少行)

BEGIN模組 開頭輸入一次  模式{動作} 有幾行就是幾次  END 模組 結尾輸入一次

 

輸出換行符

 

END結束模組 :告訴awk程式要如何結束

BEGIN模組 開頭輸入一次  模式{動作} 有幾行就是幾次  END 模組 結尾輸入一次

 

 

 

讓echo –e  處理內容裡面的換行符

 

 

 

面試題:按單詞出現頻率降序排序(計算機檔案中每個單詞的重複數量)

注:此處用sort與uniq

Sort :排序 按著26字元預設排序

Sort  -n 按照數字排序

Sort  -r 逆轉排序

Sort   -k* 指定第幾列排序

 

Uniq :去除重複的

Uniq –C 去除重複的同時,顯示次數

排序

 

 

 

Tr:替換命令