shell 六 awk命令學習

2021-09-24 03:43:13 字數 3626 閱讀 1109

呼叫awk類似sed

(目前的linux 都是用的gawk,兩者現在互相等同了。)

awk中的執行語句,類似c/c++

①在shell命令輸入

awk [-f 域分隔符] 'awk 程式段' 輸入檔案
②awk程式段插入指令碼檔案,然後通過awk命令呼叫它
awk -f awk指令碼檔案 輸入檔案

#通過-f 呼叫awk指令碼檔案

③將awk命令插入指令碼檔案後,設為可執行,然後執行指令碼檔案
./awk指令碼檔案 輸入檔案
awk 由 pattern 和 action組成;

pattern模式選擇輸入行是否執行後續action動作;

action動作可以是包含語句、函式、表示式的執行過程;

awk的pattern支援的正則表示大元字元要比grep、sed廣;

#列印空行

awk人為輸入檔案是結構化的,awk將每個輸入檔案行 定義為記錄;

行中每個字串定義為域,域之間用空格、tab鍵或其他符號進行分割;

多個連續空格、多個連續tab間等當做乙個分割域符號處理;

awk 使用 $指定執行的域, $ 後面數字代表取第幾個域,下標從1開始,$1取得第乙個域的值;

$0代表所有的域;

3. awk 系統變數

變數名意義

$n取第n個域的值

$0取所有域,即整行

argc

命令列引數的數量

argind

命令列中當前檔案的位置(從0開始標號)

ar**

命令列引數的陣列

convfmt

數字轉換格式

environ

環境變數關聯陣列

errno

最後乙個系統錯誤的描述

fieldwidths

字段寬度列表,以空格鍵分割

filename

當前檔名

fnr瀏覽檔案的記錄數

fs欄位分隔符,預設是空格鍵

ignorecase

布林變數,如果為真,則進行忽略大小寫匹配

nf當前記錄中的域數量

nr當前記錄數

ofmt

數字的輸出格式

ofs輸出域分隔符,預設是空格鍵

ors輸出記錄分隔符,預設是換行符

rlength

由match函式所匹配的字串長度

rs記錄分割符,預設是行換符

rstart

由match函式所匹配的字串的低於公車位置

subsep

陣列下標分隔符,預設值是\034

printf (格式控制符,引數)
修飾符:

修飾符意義

-左對齊

width

域的步長

.prec

小數點右邊的位數

格式符:

格式符%c

ascii字元

%d整數

%e浮點數,科學計數法

%f浮點數

%o八進位制數

%s字串

%x十六進製制數

#配合修飾符

在輸入檔案中用s替換r

gsub(r,s,t)

在t中用s替換r

index(s,t)

返回s中字串第乙個t的位置

length(s)

match(s,t)

測試s是否包換匹配t的字串

split(r,s,t)

在t上將r分成序列s

sub(r,s,t)

在t上將第一次出現的r替換為s

substr(r,s)

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

substr(r,s,t)

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

awk指令碼 parameter=value 輸入檔案

./pass.awk max=3 fs="," inpufilename

注意命令列引數無法被begin欄位語句訪問

if (x ~ /[hh]el?o/) print x

do 動作

while (天劍表示式)

for (設定計數器初值;測試計數器;計數器變化)

動作

關聯陣列

輸入檔案為sturecord:(姓名中是空格,後面的都是tab鍵)

#awk 列印第

一、二列域

#awk 變數指定域號

#-f 改變分隔符

#awk 同樣也提供另乙個環境變數fs的改變分割符

awk 'begin ' sturecord

awk 'begin ' sturecord

#awk 中 ~匹配正規表示式 !~ 不匹配正規表示式

awk 'begin $1~/root/' /etc/passwd

#if/else else 以及與或運算,用逗號分割,第三列等於10或第四列等於10則列印整行

awk 'begin ' /etc/paswd

#awk 統計 空行,類似c/c++ 有x++ ++x的區別

awk '/^$/' input

awk呼叫shell命令

awk可以用getline或system來呼叫shell的命令 1 getline 通過在awk內使用管道,可以把shell命令的輸出傳送給awk awk begin sun mar 8 22 21 52 2009 順便說一下getline的其他用法.getline除了可以通過管道從shell命令裡...

shell學習十七天 awk命令

使用awk 重新編排字段 awk非常擅長處理結構化資料和生成表單.和 sed和 grep 很相似.由於awk 具備各種及哦啊本語言的特點 所以可以把它看做是一種指令碼語言.先來看個案例,只檢視 etc passwd 目錄下的使用者名稱和組名 awk f etc passwd 意思是 使用 來分割這一...

awk命令學習

題目 檔案a,每行兩列,格式為url ip,檔案b每行一列,格式為url,通過awk實現找出b檔案中的url是否在a檔案中,如存在,將此url和對應的ip輸出 檔案大小不考慮 編寫檔案a如下 編寫檔案b如下 預期輸出結果為 設計awk命令如下 c sharp view plain copy prin...