入門總結 Awk簡介 awk不僅僅時linux系統中的一個命令,而且是一種編程語言,可以用來處理數據和生成報告。處理的數據可以是一個或多個文件,可以是來自標準輸入,也可以通過管道獲取標準輸入,awk可以在命令行上直接編輯命令進行操作,也可以編寫成awk程式來進行更為複雜的運用。 ※查看awk的版本 ...
入門總結
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我們可以指定分隔符
我們都知道換行符是 \n
NR這個符號其實真正的含義不是行號。而是數據被讀取一段以後,NR就會記錄一次。由於awk預設以\n作為每次讀數據的結束標誌;因此NR就恰好等於行號了。
※假如我們修改awk預設的讀數據的時候的預設換行符=== > 讀入換行符
※我們可以通過BEGIN模塊,在awk讀取數據之前設定他的讀入換行符是誰
※預設awk讀入換行符合輸出換行符都是\n
修改讀入換行符
應為我們設定了讀入換行符RS=“:”
因此,在awk的記憶體里的數據是按照如下排列
1 root 2x 3 0 4 0 5 root 6 /root 7/bin/bash\nbin 8 x 9 1 10 1
由於awk預設輸出換行符是\n,因此在輸出的時候awk會在記憶體的行的每行結尾附加輸出換行符號\n,因此輸出是效果如下:
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 處理內容裡面的換行符\n
※面試題:按單詞出現頻率降序排序(電腦文件中每個單詞的重覆數量)
註:此處用sort與uniq
Sort :排序 按著26字元預設排序
Sort -n 按照數字排序
Sort -r 逆轉排序
Sort -k* 指定第幾列排序
Uniq :去除重覆的
Uniq –C 去除重覆的同時,顯示次數
排序
Tr:替換命令