awk
呼叫:1.呼叫awk:
第一種方式:命令列方式
awk [-f field-separator] 'commands' input-file(s)
[-f域分隔符]是可選的,因為awk使用空格作為預設的域分隔符,因此如果要瀏覽域間有空格的文字,不必指定這個選項,如果要瀏覽諸如passwd檔案,此檔案各域以冒號作為分隔符,則必須指明-f選項,如:
awk -f: 'commands' input-file
第二種方式是將所有awk命令插入乙個檔案,並使awk程式可執行,然後用awk命令直譯器作為指令碼的首行,以便通過鍵入指令碼名稱來呼叫它。
第三種方式是將所有的awk命令插入乙個單獨檔案,然後呼叫:
awk -f awk-scrīpt-file input-files(s)
-f選項指明在檔案awk_scrīpt_file中的awk指令碼,input_file(s)是使用awk進行瀏覽的檔名。
模式和動作
任何awk語句都由模式和動作組成。在乙個awk指令碼中可能有許多語句。模式部分決定動作語句何時觸發及觸發事件。處理即對資料進行的操作。如果省略模式 部分,動作將時刻保持執行狀態。模式可以是任何條件語句或復合語句或正規表示式。模式包括兩個特殊字段 begin和end。使用begin語句設定計數和列印頭。begin語句使用在任何文字瀏覽動作之前,之後文字瀏覽動作依據輸入文字開始執行。end語 句用來在awk完成文字瀏覽動作後列印輸出文字總數和結尾狀態標誌。
域和記錄
使用$1,$3表示參照第1和第3域,注意這裡用逗號做域分隔。如果希望列印乙個有5個域的記錄的所有域,可使用$0,意即所有域。
為列印乙個域或所有域,使用print命令。這是乙個awk動作
模式和動作
模式:兩個特殊斷 begin和end
動作:實際動作大多在{}內指明
輸出1.抽取域
awk -f: '' /etc/passwd
2.儲存輸出
awk -f: '' /etc/passwd | tee user 使用tee命令,在輸出檔案的同時,輸出到螢幕
使用標準輸出
awk -f: '' /etc/passwd >user3
4.列印所有記錄
awk -f: '' /etc/passwd
5.列印單獨記錄
awk -f: '' /etc/passwd
6.列印報告頭
awk -f: 'begin ' /etc/passwd
7.列印結尾
awk -f: ' end ' /etc/passwd
條件操作符
1.匹配
awk -f: '' /etc/passwd //表示如果field1包含root,列印它
2.精確匹配
使用等號 ==
awk -f: '' /etc/passwd
3.不匹配
!~awk -f: '' /etc/passwd
!=精確不匹配
awk -f: '' /etc/passwd
4.小於
<
5.小於等於
<=
6.大於
>
.........
7.設定大小寫
awk '/[rr]oot/' /etc/passwd
8.任意字元
awk -f: '' /etc/passwd //^...t表示第四個字幕是t
9.或關係匹配
awk -f: '' /etc/passwd
10.行首
awk '/^root/' /etc/passwd // ^root(行首包含root)
11.and &&
awk -f: '' /etc/passwd
12.or ||
內建變數:
arcc 命令列引數個數
ar** 命令列引數排列
environ 支援佇列中系統環境變數的使用
fnr 瀏覽檔案的記錄數
fs 置頂分隔符,等價於-f
nf 瀏覽記錄的域的個數
nr 已讀的記錄數
ofs 輸出域分隔符
ors 輸出記錄分隔符
rs 控制記錄分隔符
列印有多少行記錄
awk 'end ' /etc/passwd
設定輸入域到變數名
awk -f: '' /etc/passwd
域值比較操作
awk '' input-file
修改文字域只顯示修改改記錄
awk -f: '}' /etc/passwd
檔案長度相加
ls -l|awk '/^[^d]/ end '
內建的字元竄函式
gsub(r,s) 在整個$0中用s替代r
gsub(r,s,t) 在整個t中用s替代r
index(s,t) 返回s中字串t的第一位置
length(s) 返回s長度
match(s,r) 測試s中是否包含匹配r的字串
split(s,a,fs) 在fs上將s分成序列a
sub(s, ) 用$0中最左邊也是最長的字串替代
subtr(s,p) 返回字串s中從p開始的字尾部分
substr(s,p,n) 返回字串s中從p開始長度為n的字尾部分
1.gsub
awk 'gsub(/^root/,"netseek") ' /etc/passwd 將與root開頭的root替換為netseek
awk 'gsub(/0/,2) ' /etc/fstab
awk '' /etc/fstab
2.index
awk 'begin ' 查詢字串root中o出現的第一位置
awk -f: '$1=="root" ' /etc/passwd
awk -f: '' /etc/passwd
3.length
awk -f: ' /etc/passwd
awk -f: '$1=="root" ' /etc/passwd
4.match (在ancd中查詢c的位置)
awk 'begin '
5.split
返回字串陣列元素個數
awk 'begin '
6.sub 只能替換指定域的第乙個0
awk 'sub(/0/,2) ' /etc/fstab
7.substr
按照起始位置及長度返回字串的一部分
awk 'begin ' //第5個字元開始,取9個字元。
awk 'begin ' //第5個位置開始,取後面的所有.
字串遮蔽序列
\b 退格鍵
\f 走紙換頁
\n 新行
\r 回車
\t tab
\c 任意其他特殊字元
\ddd 八進位制
很簡單的例子
awk -f: '' /etc/passwd 輸出函式printf(注意是printf不是print,兩者效果不同的)
printf函式擁有幾種不同的格式化輸出功能
printf修飾符
- 左對齊
width 域的步長0表示0步長
.prec 最大字串長度,或小數點右邊的位數
awk printf格式
%c ascii字元
%d 整數
%e 浮點數,科學計數法
%f 浮點數
%g awk決定使用哪種浮點數轉換,e或者f
%o 八進位制數
%s 字串
%x 十六進製制數
1.字串轉換
echo "65" | awk ''
awk 'begin '
awk 'begin '
2.格式化輸出
awk -f: '' /etc/passwd
awk -f: 'begin ' /etc/passwd
3.向一行awk命令傳值
who | awk '' user=$logname
4.awk指令碼檔案 (在檔案名字後面加字尾.awk方便區分)
#!/bin/awk -f
begin
end
命令列 Git Bash命令列小結
展示當前完整路徑pwd 建立資料夾mkdir 建立檔案touch 刪除資料夾rm rf 刪除檔案rm 重新命名mv 展示當前路徑下檔案 除了隱藏檔案 ls 展示當前路徑下所有檔案ls a 展示當前路徑下所有檔案以及詳細資訊ls al 轉至某目錄cd 根目錄 上級目錄.當前目錄.檢視檔案cat 檔名稱...
命令列引數小結
說來慚愧,對於命令列引數這個概念接觸的比較少,可能也是之前一直使用ide進行開發程式的原因吧,對於c程式,總是從main函式開始執行,main函式的原型如下 int main int argc,char ar 這裡面我們可以發現main函式的特點 1 有兩個形參,argc和 ar 2 返回值為 in...
命令列入門小結
開啟命令列軟體 cmder,在命令提示符 後輸入命令即可 ls是list 羅列的縮寫,輸出內容為當前目錄下的所有非隱藏檔案 cat 英文全拼 concatenate 可以列印出檔案內的文字資訊 例項將web檔案中的內容列印出來,顯示在終端內 mv 可以移動檔案或者目錄到指定路徑,也可以用於檔案重新命...