三劍客(awk
,sed
,grep
)
awk
是一個報告生成器,它擁有強大的文本格式化的能力。
awk
的基本語法是awk [options] 'Pattern{Action}' file
從一個最簡單的命令作爲start,省略[options]
和Pattern
,將Action
設置成最簡單的print
:
$ echo abc > test.txt
$ awk '{print}' test.txt
abc
例題:
解析
awk
是一行一行地處理文本文件,運行流程是:
- 先運行
BEGIN
後的{Action}
,相當於表頭 - 再運行
{Action}
中的文件處理主體命令 - 最後運行
END
後的{Action}
中的命令
有幾個經常用到的awk
常量:NF
是當前行的field
字段數;NR
是正在處理的當前行數。
注意到是轉置,假如原始文本有m
行n
列(字段),那麼轉置後的文本應該有n
行m
列,即原始文本的每個字段都對應新文本的一行。我們可以用數組res
來儲存新文本,將新文本的每一行存爲數組res
的一個元素。
在END
之前我們遍歷file.txt
的每一行,並做一個判斷:在第一行時,每碰到一個字段就將其按順序放在res
數組中;從第二行開始起,每碰到一個字段就將其追加到對應元素的末尾(中間添加一個空格)。
文本處理完了,最後需要輸出。在END
後遍歷數組,輸出每一行。注意printf
不會自動換行,而print
會自動換行。