AWK的基本使用

2021-06-29 13:57:24 字數 1924 閱讀 9260

由於一直在做it實施工作,所以工作中接觸到unix後台的東西多些.從剛開始只會使用cd、pwd等簡單的命令,到後來順手就能寫個幾十行的shell指令碼,在這個過程中經歷了很多,也學習到了很多.awk是我個人認為使用最多,最高效的命令.本篇就先回憶下awk的基礎.

awk雖然功能強大,但是其語法卻一點也不複雜.它的語法如下:

awk 'beginend' filename

awk 預設以空格為分隔符,也可以使用 -f引數指定分隔符.awk的工作流程是這樣的,它讀取檔案中的每一行,對符合其匹配條件的每一行進行處理,」search pattern1」 是它的匹配模式,」action1」是要進行處理的操作.begin{}和end{}是可選的,他們只有在第一次和最後一次執行.

$cat example.txt

user1,password1,username1,unit1,10

user2,password2,username2,unit2,20

user3,password3,username3,unit3,30

$awk -f"," 'beginend' example.txt

$ 60

$awk -f"," '

begin}end' example.txt

$ 50

第乙個awk命令是求取檔案中最後一列的和,第二列是求取檔案中行號大於1的所有列的和.命令中的nr和nf為awk的內建變數,後邊會進行專門講述.

記得在一篇部落格裡提出了這樣乙個問題

你怎麼辦?

裡邊各路高手的命令列中都用到awk命令(詳細內容在下面參考中給出的鏈結).在工作中經常會遇到類似的問題,上百m甚至是幾個g的檔案根本不可能用編輯器去開啟,更不可能用一行一行的用計算器去算了.很多人會想到寫乙個c/c++程式.但是就算你是個程式設計高手也不可能在幾分鐘內完成.如果是乙個熟練使用unix/linux的人肯定會想到使用awk來解決.

屬性說明

$0當前記錄(作為單個變數)

$1~$n

當前記錄的第n個字段,欄位間由fs分隔

fs輸入字段分隔符預設是空格

nf當前記錄中的字段個數,就是有多少列

nr已經讀出的記錄數,就是行號,從1開始

rs輸入的記錄他隔符預設為換行符

ofs輸出字段分隔符預設也是空格

ors輸出的記錄分隔符,預設為換行符

argc

命令列引數個數

argv

命令列引數陣列

filename

當前輸入檔案的名字

ignorecase

如果為真,則進行忽略大小寫的匹配

argind

當前被處理檔案的argv標誌符

convfmt

數字轉換格式%.6g

environ

unix環境變數

errno

unix系統錯誤訊息

fieldwidths輸入字段寬度的空白分隔字串

fnr當前記錄數

ofmt

數字的輸出格式%.6g

rstart

被匹配函式匹配的字串首

rlength

被匹配函式匹配的字串長度

subsep

\034

其實沒必要記住所有的內建變數,只需要記住幾個常用的即可,如 0,

1 , nf,nr ,ofs等這些最常用的,其餘的可以在用的時候現查閱.

$awk 'begin' example.txt

10|unit1|username1

20|unit2|username2

30|unit3|username3

說明:

執行命令後輸出了檔案中每行的倒數三列,並且與原檔案中的順序相反,分隔符也變成了|. 類似這樣的操作也是很常見的.

awk的基本使用

常用的分割 testphone 檔案中儲存了 18768193916,18768187118,13777495441,17764562286,15068118584,13186967520,13750893161,18758322331,18767180646,13588023315 cat tes...

awk程式設計基本使用示例

對於每一行,如果第三列大於0,則列印第一列,第二列 第三列的值 awk 3 0 file1 file2 f指定執行程式的檔案 awk f programfile inputfile 列印整行輸入 awk 或者 awk nr當前行數,nf當前行的列數,下面這個 是列印當前行的列數,第一列和最後一列 a...

awk命令基本使用(1)

1 通過man awk可知它的詳情 awk 是一種程式語言,awk有很多內建的功能,比如陣列 函式等.例項1通過awk得到ip root localhost ifconfig em1 link encap ethernet hwaddr 14 18 77 70 62 20 inet addr 10....