1.awk
對付文字處理工作,做一些文本/數(shù)據(jù)處理,最基本功能是在文件或字符串中基于指定規(guī)則瀏覽和抽取信息.
1. 調(diào)用awk
第一種是命令行方式,如:
- awk [-F fs] 'command' file這里,command是真正的awk命令宣鄙。上面例子中, [-F 域分隔符]是可選的默蚌,默認使用空格作為缺省的域分隔符冻晤,這樣就不用指定這個選項.
fs是指定的分隔符,可以使用字符串或者正則表達式绸吸。例如:-F:.
- 第二種方法是將所有awk命令插入一個文件鼻弧,并使awk程序可執(zhí)行设江,然后用awk命令解釋器作為腳本的首行,以便通過鍵入腳本名稱來調(diào)用它.
- 第三種方式是將所有的awk命令插入一個單獨文件温数,然后調(diào)用:
awk -f script_file file
-f選項指明在文件 script _ file中的a w k腳本,file是使用awk進行瀏覽的文件名.
理解:
第一種是把命令寫在處理文件外面蜻势,用單引號標注撑刺;.
第二種是把命令寫在處理文件里面;
第三種是把命令單獨寫成腳本握玛,然后處理文件够傍;
2.awk腳本
在命令中調(diào)用awk時, awk腳本由各種操作和模式組成.
如果設置了-F選項挠铲,則awk每次讀一條記錄或一行冕屯,并使用指定的分隔符分隔指定域.
但如果未設置-F選項,awk假定空格為域分隔符拂苹,并保持這個設置直到發(fā)現(xiàn)一新行
awk讀取命令行上所指定的各個文件安聘,一次讀取一條記錄,找到域分隔符瓢棒,設置其為域n.
再針對每一行浴韭,應用程序指定的命令.
- 模式和動作
任何awk語句都由模式和動作組成.- 模式可以是任何條件語句或復合語句或正則表達式.
模式有兩個特殊字段,BEGIN ,END.
BEGIN語句塊在awk從輸入中讀取行之前執(zhí)行.
這兩個都是可選的語句塊脯宿,變量初始化念颈,打印輸出等語句都可以寫在里面;- END在awk從輸入流讀完所有的行之后進行操作.
實際動作在大括號 { }內(nèi)指明连霉,如果不指明采取動作榴芳,awk將打印出所有瀏覽出來的記錄.
動作由一個或多個命令、函數(shù)跺撼、表達式組成窟感,之間由換行符或分號分開,主要部分是變量賦值歉井,輸出命令肌括,內(nèi)置函數(shù),控制流語句.
模式部分決定動作語句何時觸發(fā)及觸發(fā)事件酣难,處理即對數(shù)據(jù)進行的操作.如果省略模式部分谍夭,動作將時刻保持執(zhí)行狀態(tài).
- awk ’BEGIN { print "start" } pattern { command } END {print"end"}' file.
begin end 語句塊,通用模式匹配語句塊憨募,這些都是可選的.
通用語句塊是動作紧索,沒有模式部分,動作時刻執(zhí)行.
- 域和記錄
awk執(zhí)行時菜谣,其瀏覽域標記為$1珠漂, $2 . . . $n晚缩。這種方法稱為域標識。使用這些域標識將更容
易對域進行進一步處理.$0媳危,意即所有域.
圖片3.png
圖片4.png
- 在碰到 awk錯誤時荞彼,可相應查找:
? 確保整個awk命令用單引號括起來.
? 確保命令內(nèi)所有引號成對出現(xiàn).
? 確保用花括號括起動作語句,用圓括號括起條件語句.
? 可能忘記使用花括號待笑,也許你認為沒有必要鸣皂,但 awk不這樣認為,將按之解釋語法.
3.awk中正則表達式及其操作
awk里正則表達式用斜線括起來暮蹂,例如/liu/寞缝,有點跟perl相似.
圖片2.png
元字符的話旅薄,awk都可以識別使用.
awk中if后面的條件用()括起來凿宾,注意與{}區(qū)別,這個是條件表達式.
應用 awk [-F fs]‘command’ file 腐芍,多注意括號集侯,引號被啼,其余正常使用正則表達式就行.
awk對域還有好幾種操作,參考linux與unix shell棠枉,對于域值比較趟据,修改域操作,增加列值术健,文件長度相加汹碱,還挺有幫助的.
awk還有好多字符串函數(shù),更有效的處理文本荞估;需要對文本處理時咳促,可以參考.
awk里正則表達式用法格式:
圖片1.png
2.輸入輸出(echo,read勘伺,cat跪腹,tee,printf)
- 使用echo命令可以顯示文本行或變量,或者把字符串輸入到文件飞醉。它的一般形式為:
echo string
echo 將各個參數(shù)打印到標準輸出冲茸,并以換行符結(jié)束.
-n 不用換行符結(jié)束。
-e 允許后面的輸出進行轉(zhuǎn)義.
- read從標準輸入中讀取一行缅帘,并把輸入行的每個字段的值傳遞給指定的shell變量.
可以使用read語句從鍵盤或文件的某一行文本中讀入信息轴术,并將其賦給一個變量.如果只指定了一個變量,那么 read將會把所有的輸入賦給該變量钦无,直至遇到第一個文件結(jié)束符或回車.
它的一般形式為:
read varible1 varible2 ...
eg:read name surname
peng liu
echo $name $ surname
peng liu
如果逗栽,變量少于字段個數(shù),那么第一個字段被賦給第一個變量失暂,其余的部分都賦給第二個變量.
- cat
顯示文件內(nèi)容彼宠,創(chuàng)建文件.
- tee
tee命令功能可以用字母T表示鳄虱,功能是把輸出的一個副本輸送到標準輸出,另一個副本拷貝到指定的文件里.
sort file | tee out.txt
- printf
格式化輸出凭峡,加強版的echo拙已,有各種各樣的格式輸出.類似與c語言里的printf().
printf函數(shù)基本語法是printf( [格式控制符],參數(shù))摧冀,格式控制字符通常在引號里.
格式控制符:
圖片1.png