說明:
awk被設計用於資料流,能夠對列和行進行操作。而sed更多的是匹配,進行替換和刪除。
awk有很多內建的功能,比如陣列,函式等。靈活性是awk的最大優勢。
awk的結構
awk '
begin
pattern
end'
file
為了偏於**,我打了回車,實際上是一行
乙個awk指令碼通常是3部分
1.begin語句塊
2. 能夠使用模式匹配的通用語句塊
3.end語句塊
他們任何一部分都可以不出現在指令碼中。指令碼通常包含在雙引號或者單引號內。
例如:
awk 'beginend' filename工作原理
awk命令的工作方式如下:
1. 執行begin語句塊中的語句
2. 從檔案或者stdin中讀取一行,然後執行pattern. 迭代直到全部讀取完畢
3. 最後執行end語句塊
再次提醒,他們任何一部都可以沒有
而awk的功能也遠不止如此
入門例項:
echo | awk ''列印: v1 v2 v3
解釋:逗號為定界符(分隔符)
echo | awk ''列印v1-v2-v3
解釋:雙引號為連線符
其他任何符號,都不能正常輸出v1,v2,v3
解讀--help(乙個非常龐大複雜的幫助文件,官方用了410頁的篇幅pdf來介紹,如果我只言片語,你信我自己都不信。。)
用法: awk [posix 或 gnu 風格選項] -f 指令碼檔案 [--] 檔案 ...
用法: awk [posix 或 gnu 風格選項] [--] '程式' 檔案 ...
posix 選項: gnu 長選項:
-f 指令碼檔案 --file=指令碼檔案
-f fs --field-separator=fs
指定輸入文字分隔符,fs是乙個字串或者是乙個正規表示式,
-v var=val --assign=var=val
將外部變數值付給var
-m[fr] val
-o --optimize
啟用一些優化程式的內部表示。
-w compat --compat
在相容模式下執行awk。所以gawk的行為和標準的awk完全一樣,所有的awk擴充套件都被忽略。
-w dump-variables[=file] --dump-variables[=file]
列印全域性變數,其型別,提交的最終值的排序列表。
-w exec=file --exec=file
與-f類似,但與他有兩點不同,(我回頭把相關文件上傳,太長)
-w gen-po --gen-po
(內容太多)
-w help --help 列印幫助
-w lint[=fatal] --lint[=fatal]
警告可疑或不移植到其他的awk實現的結構
-w lint-old --lint-old
列印關於不能向傳統unix平台移植的結構的警告
-w non-decimal-data --non-decimal-data
啟用自動輸入資料的解釋,八進位制和十六進製制值
-w profile[=file] --profile[=file]
啟用awk程式剖析
-w posix --posix
在嚴格意義上的posix模式運作。
-w re-interval --re-interval
允許間隔表示式在正規表示式上
-w source=program-text --source=program-text
-w traditional --traditional
傳統的unix awk的正規表示式匹配
-w usage --usage
-w use-lc-numeric --use-lc-numeric
解析數字輸入時,強制使用的語言環境中的小數點字元
資料-w version --version
提交錯誤報告請參考「gawk.info」中的「bugs」頁,它位於列印版本中的「reporting
problems and bugs」一節
注意:gawk是awk的gnu版本,即使help ,在ubuntu下也需要先安裝gawk
部分特殊變數:
nr:表示記錄數量,在執行過程中對應於行號
nf:表示字段數量,在執行過程中對應於當前行的字段數
$0:這個變數包含執行過程中當前行的文字內容
$1:第乙個欄位的文字內容
$2:第二個欄位的文字內容
例子:
例1.
echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7"|\#這個\是在視窗中寫多行命令用的awk ''
小注一下:$1是列印第乙個,$nf列印最後乙個字段,$(nf-1)列印倒數第二個
例2.
seq 5 | awk 'beginend'這個例子用到了基本格式。
begin中 初始化了sum,列印summation
中間模組列印了第一列,然後給sum+1
end中列印了sum
例3. 關於-v 外部變數
$var=
10000
$echo | awk –v
variable
=$var''
還有另一種靈活的方法可以將多個外部變數傳遞給awk,例如:
$var1
="value1"
var2
="value2"
$echo | awk ''
v1=$var1
v2=$var2
如果來自檔案
awk ''v1=$var1
v2=$var2 filename
例4
$awk 'nr < 5'#行號小於5
$awk 'nr==1,nr==4'#行號在1到5之間的行
$awk '/linux/'#包含樣式linux的行(可以用正規表示式指定樣式)
$awk '!/linux/'#不包含樣式linux的行
這次先寫這些,爭取在花2個篇幅能把awk做個比較全面的認識。
附件:
一天乙個shell命令 cut
1.命令簡介 cut根據指定的定界符,切分檔案,並將選中的列輸出到標準輸出。2.用法 cut 選項 檔案 列印輸入行的選中的parts 到標準輸出 3.選項 4.示例 以密碼 etc passwd為例 root xqzt tail n 5 etc passwd nfsnobody x 65534 6...
一天乙個shell命令 文字系列 file
file 官方解釋 determine type of files.判定檔案的型別。小知識 在unix linux系統中,檔案型別並不是由副檔名決定的 windows是的 開篇例子 1.file file.txt 輸出 file.txt ascii english text 注 file.txt是我...
一天乙個shell命令 檔案內容操作系列 cat
注 在awk命令之後,沒有太多複雜命令,都是一些基礎命令。說明 cat,是單詞 concatenate 的縮寫,把檔案的內容輸出到stdout.當與重定向操作符 或 結合使用時,一般都是用來將多個檔案連線起來.用法 1.cat file1 file2 file3 2.不僅可以從檔案中讀取內容並且拼接...