Linux常用指令 6

2021-07-22 04:52:14 字數 3342 閱讀 2781

awk

基本功能是在檔案或字串中基於指定規則遊覽和抽取資訊,awk抽取資訊後,才能進行其他文字操作。

呼叫awk

當前有三種方式呼叫awk,第一種方式為命令列方式

# commands是真正的awk命令,[-f域分隔符]是可選的,因為awk是使用空格作為預設的域分隔符,因此如果要遊覽域間有空格的文字,不必指定這個選項,但如果要遊覽注入passwd檔案,此檔案各域以冒號作為分割符,則必須指明-f選項

awk [-f field-separator] 'commands' input-file(s)

#以冒號作為分隔符

awk -f:'commands' input-file

第二種方式是將所有awk命令插入乙個檔案,並使用awk程式可執行,然後用awk命令直譯器作為指令碼的首行,以便通過鍵入指令碼名稱來呼叫它;第三種是將所有的awk命令插入乙個單獨檔案,然後呼叫:

awk -f awk-script-file input-file(s)

awk指令碼

awk指令碼由各種操作和模式組成,如果設定了-f選項則awk每次讀一條記錄或一行,並使用指定的分隔符分割指定域,但如果未設定-f選項,awk假定空格為域分隔符,並保持這個設定直到發現一新行,當新行出現時,awk命令獲悉已讀完整條記錄,然後在下乙個記錄啟動讀命令,這個讀程序將持續到檔案尾或檔案不再存在。

模式和動作

任何awk語句都由模式和動作組成,在乙個awk指令碼中可能有許多語句,模式部分決定動作語句何時觸發及觸發事件,處理即對資料進行的操作,如果省略模式部分,動作將時刻保持執行狀態。模式可以是任何條件語句或符合語句或正規表示式,模式包括兩個特殊欄位begin和end,使用begin語句設定計數和列印頭,begin語句使用在任何文字遊覽動作之前,之後文字遊覽動作依據輸入檔案開始執行,end語句用來在awk完成文字遊覽動作後列印輸出文字總數和結尾狀態標誌,如果不特別指明模式,awk總是匹配或列印行數,實際動作在大括號內指明,動作大多數用來列印,但是還有些更長的**諸如if和迴圈(looping)語句及迴圈退出結構,如果不指明採取動作,awk將列印出所有遊覽出來的記錄。

域和記錄

awk執行時,其遊覽域標記為$1,$2….$n,這種方法稱為域標識,使用這些域標識將更容易對域進行進一步處理,使用\$1,\$3表示參照第1和第3域,這裡用都要做域分隔,如果希望列印乙個有5個域的記錄的所有域,不必指明\$1,\$2,\$3,\$4,\$5,可使用\$0,意即所有域,awk遊覽時達到一新行,即假定到達包含域的記錄末尾,然後執行新記錄下一行的讀動作,並重新設定域分隔,為列印乙個域或所有域,使用print命令,這是乙個awk動作(動作語法用圓括號括起來)

條件操作符(結合上述用例)

內建變數

awk有許多內建變數用來設定環境資訊,這些變數可以被改變

變數名含義

argc

命令列傳入awk指令碼的引數個數

argv

是argc的引數排列陣列,其中每一元素表示為argv[n],n為期望訪問的命令列引數

environ

支援佇列中系統環境變數的使用,要訪問單獨變數,使用實際變數名,如environ[「editor」]=」vi」

filename

awk遊覽的檔名,支援awk指令碼實際操作的輸入檔案,因為awk可以同時處理許多檔案,因此如果訪問了這個變數,將告值系統目前正在遊覽的實際檔案

fnr遊覽檔案的記錄數,其變數值小於等於nr,如果指令碼正在訪問許多檔案,每一新輸入檔案都將重新設定此變數

fs設定輸入域分隔符,等價於命令列-f選項,預設情況下為空格,如果用逗號來作分隔符,設定fs=」,」

nf遊覽記錄的域個數,在記錄被讀之後再設定

nr已讀的記錄數

ofs輸出域分隔符,預設為空格,如果想設定為#,寫入ofs=「#」

ors輸出記錄分隔符,預設為新行(\n)

rs控制記錄分隔符,預設為新行(\n)

#awk操作符

設定輸入域到域變數名:一般的變數名設定方式為name=$n,這裡name為呼叫的域變數名,n為實際域號

域值比較:在begin中給變數名賦值;在關係操作中使用實際數值

修改數值域取值:在awk中修改任何域時,實際輸入檔案是不可修改的,修改的只是儲存在快取裡的awk複本,awk會在變數nr或nf變數中反映出修改痕跡

修改文字域:給物件賦乙個新的字串

只顯示修改記錄:在模式後面使用花括號將只列印修改部分

建立新的輸出域:要通過其他域賦予新域識別符號

增加列值:使用符號+=

檔案長度相加:要排除子目錄,awk首先提出首字元為d的記錄,然後將檔案an長度列相加

內建的字串函式

字串含義

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

sprint(fmt,exp)

返回經fmt格式化後的exp

sub(r,s)

用$0中最左邊最長的子串替代s

substr(s,p)

返回字串s中從p開始的字尾部分

substr(s,p,n)

返回字串s中從p開始長度為n的字尾部分

printf修飾符

採用awk寫的指令碼,建議字尾名以.awk形式給出

例1:

例2:

Linux基礎指令 6

檔案許可權 list l 檔名 檢視檔案屬性 檢視桌面檔案aka 檔案屬性 rw r r 1 root root 0 apr 8 04 01 aka 從左至右分為8個部分 檔案型別 普通檔案 d 錄c 字元裝置 s 接字p 管道b 快裝置l 連線 rw r r 檔案讀寫許可權 三個字元一組,共三組,...

linux常用指令

一 查詢狀態類 1 pwd pwd print work directory 顯示當前工作目錄的絕對路徑 2 ls ls list 顯示當前目錄的檔案 二 目錄類 1 cd cd change directory 切換目錄 波浪符號,代表使用者家目錄 cd 返回上乙個目錄 cd 回到自己的家目錄 c...

Linux常用指令

ctrl alt t 開啟終端 sudo su 在終端裡從普通使用者轉換成 root 使用者。su 普通使用者名稱 在終端裡從 root 使用者轉成普通使用者。clear 清除螢幕 mkdir 資料夾名 新建資料夾 rmdir 資料夾名 刪除資料夾 rm f filename 強制刪除乙個檔案 rm...