入門總結
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:替換命令