由於一直在做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....