1. 程式人生 > >python——awk命令(1)

python——awk命令(1)

awk是一個報告生成器,擁有強大的文字格式化的能力。可以把報告理解成“報表”或“表格”。利用awk的“文字格式化能力”將一些文字整理成我們想要的樣子。

awk基本語法:awk [options] 'Pattern{Action}' file

從字面上理解 ,action指的就是動作,awk擅長文字格式化,並且將格式化以後的文字輸出,所以awk最常用的動作就是print和printf,因為awk要把格式化完成後的文字輸出啊,所以,這兩個動作最常用。

$0 表示顯示整行 ,$NF表示當前行分割後的最後一列($0和$NF均為內建變數)

還可以新增欄位,與檔案中的列結合起來,如下圖

AWK包含倆種特殊的模式:BEGIN 和 END。

BEGIN:指定處理文字之前需執行的操作。

END:指定處理完所有行之後需要執行的操作。

輸入分隔符

輸入分隔符比較容易理解,當awk逐行處理文字的時候,以輸入分隔符為準,將文字切成多個片段,預設使用空格,但是,如果一段文字中沒有空格,我們可以指定以特定的文字或符號作為輸入分割符,比如下圖中的例子,我們指定使用"#"作為輸入分隔符。

使用 -F# 分割

除了使用-F選項指定的輸入分隔符,還可以設定內部變數的方式,指定awk輸入分隔符:-v FS='#'

輸出分隔符

awk預設的輸出分隔符是空格,但也可以通過內建變數OFS設定輸出分隔符,-v OFS="+++"

awk變數

FS:輸入欄位分隔符, 預設為空白字元

OFS:輸出欄位分隔符, 預設為空白字元

NF:number of Field,當前行的欄位的個數(即當前行被分割成了幾列),欄位數量

NR:行號,當前處理的文字行的行號。

awk處理多個檔案的時候,如果使用NR顯示行號,那麼,多個檔案的所有行會按照順序進行排序。

FNR:各檔案分別計數的行號

想要分別顯示兩個檔案的行號,該怎麼辦呢,這個時候就會用到內建變數FNR,效果如下。

RS:輸入記錄分隔符(輸入換行符), 指定輸入時的換行符

讓awk以為每次遇到一個空格就是新的一行。那麼我們該怎麼做呢?示例如下

ORS:輸出記錄分隔符(輸出換行符),輸出時用指定符號代替換行符

FILENAME:顯示當前檔名

ARGC:命令列引數的個數

ARGV:陣列,儲存的是命令列所給定的各引數

自定義變數

方法1:-v varname=value 變數名區分大小寫

方法2:在program 中直接定義,但注意,變數定義和動作之間需要 “;” 分割

還可以使用下面方式