awk應用小結 所有命令列均經除錯

2021-09-21 11:05:34 字數 4046 閱讀 5941

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 可以移動檔案或者目錄到指定路徑,也可以用於檔案重新命...