gnu awk:
文字處理三工具:grep, sed, awk
grep, egrep, fgrep:文字過濾工具;pattern
sed: 行編輯器
模式空間、保持空間
awk:報告生成器,格式化文字輸出;
awk: aho, weinberger, kernighan --> new awk, nawk
gnu awk, gawk
gawk - pattern scanning and processing language
基本用法:gawk [options] 'program' file ...
program: pattern
語句之間用分號分隔
print, printf
選項:-f:指明輸入時用到的字段分隔符;
-v var=value: 自定義變數;
1、print
print item1, item2, ...
要點:(1) 逗號分隔符;
(2) 輸出的各item可以字串,也可以是數值;當前記錄的字段、變數或awk的表示式;
(3) 如省略item,相當於print $0;
2、變數
2.1 內建變數
fs:input field seperator,預設為空白字元;
ofs:output field seperator,預設為空白字元;
rs:input record seperator,輸入時的換行符;
ors:output record seperator,輸出時的換行符;
nf:number of field,字段數量
, nr:number of record, 行數;
fnr:各檔案分別計數;行數;
filename:當前檔名;
argc:命令列引數的個數;
argv:陣列,儲存的是命令列所給定的各引數;
2.2 自定義變數
(1) -v var=value
變數名區分字元大小寫;
(2) 在program中直接定義
3、printf命令
格式化輸出:printf format, item1, item2, ...
(1) format必須給出;
(2) 不會自動換行,需要顯式給出換行控制符,\n
(3) format中需要分別為後面的每個item指定乙個格式化符號;
格式符:
%c: 顯示字元的ascii碼;
%d, %i: 顯示十進位制整數;
%e, %e: 科學計數法數值顯示;
%f:顯示為浮點數;
%g, %g:以科學計數法或浮點形式顯示數值;
%s:顯示字串;
%u:無符號整數;
%%: 顯示%自身;
修飾符:
#[.#]:第乙個數字控制顯示的寬度;第二個#表示小數點後的精度;
%3.1f
-: 左對齊
+:顯示數值的符號
4、操作符
算術操作符:
x+y, x-y, x*y, x/y, x^y, x%y
-x+x: 轉換為數值;
字串操作符:沒有符號的操作符,字串連線
賦值操作符:
=, +=, -=, *=, /=, %=, ^=
++, --
比較操作符:
>, >=, <, <=, !=, ==
模式匹配符:
~:是否匹配
!~:是否不匹配
邏輯操作符:
&&||
!函式呼叫:
function_name(argu1, argu2, ...)
條件表示式:
selector?if-true-expression:if-false-expression
# awk -f: '' /etc/passwd
5、pattern
(1) empty:空模式,匹配每一行;
(2) /regular expression/:僅處理能夠被此處的模式匹配到的行;
(3) relational expression: 關係表示式;結果有「真」有「假」;結果為「真」才會被處理;
真:結果為非0值,非空字串;
(4) line ranges:行範圍,
startline,endline:/pat1/,/pat2/
注意: 不支援直接給出數字的格式
~]# awk -f: '(nr>=2&&nr<=10)' /etc/passwd
(5) begin/end模式
begin{}: 僅在開始處理檔案中的文字之前執行一次;
end{}:僅在文字處理完成之後執行一次;
6、常用的action
(1) expressions
(2) control statements:if, while等;
(3) compound statements:組合語句;
(4) input statements
(5) output statements
7、控制語句
if(condition)
if(condition) else
while(conditon)
do while(condition)
for(expr1;expr2;expr3)
break
continue
delete array[index]
delete array
exit
7.1 if-else
語法:if(condition) statement [else statement]
~]# awk -f: ' else }' /etc/passwd
~]# awk -f: '' /etc/passwd
~]# awk '' /etc/fstab
~]# df -h | awk -f[%] '/^\/dev/' | awk ''
使用場景:對awk取得的整行或某個欄位做條件判斷;
7.2 while迴圈
語法:while(condition) statement
條件「真」,進入迴圈;條件「假」,退出迴圈;
使用場景:對一行內的多個字段逐一類似處理時使用;對陣列中的各元素逐一處理時使用;
~]# awk '/^[[:space:]]*linux16/}' /etc/grub2.cfg
~]# awk '/^[[:space:]]*linux16/; i++}}' /etc/grub2.cfg
7.3 do-while迴圈
語法:do statement while(condition)
意義:至少執行一次迴圈體
7.4 for迴圈
語法:for(expr1;expr2;expr3) statement
for(variable assignment;condition;iteration process)
~]# awk '/^[[:space:]]*linux16/}' /etc/grub2.cfg
特殊用法:
能夠遍歷陣列中的元素;
語法:for(var in array)
7.5 switch語句
語法:switch(expression)
7.6 break和continue
break [n]
continue
7.7 next
提前結束對本行的處理而直接進入下一行;
~]# awk -f: '' /etc/passwd
8、array
關聯陣列:array[index-expression]
index-expression:
(1) 可使用任意字串;字串要使用雙引號;
(2) 如果某陣列元素事先不存在,在引用時,awk會自動建立此元素,並將其值初始化為「空串」;
若要判斷陣列中是否存在某元素,要使用"index in array"格式進行;
weekdays[mon]="monday"
若要遍歷陣列中的每個元素,要使用for迴圈;
for(var in array)
~]# awk 'begin}'
注意:var會遍歷array的每個索引;
練習1:統計/etc/fstab檔案中每個檔案系統型別出現的次數;
~]# awk '/^uuid/end}' /etc/fstab
練習2:統計指定檔案中每個單詞出現的次數;
~]# awk '}end}' /etc/fstab
9、函式
9.1 內建函式
數值處理:
rand():返回0和1之間乙個隨機數;
字串處理:
length([s]):返回指定字串的長度;
sub(r,s,[t]):以r表示的模式來查詢t所表示的字元中的匹配的內容,並將其第一次出現替換為s所表示的內容;
gsub(r,s,[t]):以r表示的模式來查詢t所表示的字元中的匹配的內容,並將其所有出現均替換為s所表示的內容;
split(s,a[,r]):以r為分隔符切割字元s,並將切割後的結果儲存至a所表示的陣列中;
~]# netstat -tan | awk '/^tcp\>/end}'
awk的使用方法 一
awk的工作方式是 通過給定的引數,去逐行讀取文字 或通過管道傳遞的內容 通過模式判斷,再執行對應的動作 awk如何處理每一行的內容 awk每讀一行,會將這一行的內容定義為 0,再通過空格將這一行切割成多個字串,按順序分別定義為 1 2 3 4.以此類推 模板 awk options pattern...
awk的使用方法 三
常用的awk內建變數 序號 名稱 描述 1 argc 命令列引數的數目。2 ar 包含命令列引數的陣列。3 argind 當前被處理的檔案的ar 的index 從0開始算 4 binmode 在non posix系統中,檔案的i o指定使用 binary 模式。5 convfmt 數字轉換格式 預設...
pythonpip使用方法 pip使用方法整理
匯出專案已安裝的pip包 pip list 檢視專案中安裝的包 pip freeze requirements.txt 將專案中所用到的第三方庫輸出到requirements.txt中 pip install 版本號 pip install i 本次使用清華源進行安裝 離線安裝第三方庫 一鍵安裝整個...