歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux管理 >> Linux維護

Linux如何使用文本處理工具awk

awk是Linux中的文本處理工具,類似於shell編程語言,擁有屬於自己的語言,下面小編就給大家介紹下Linux中awk文本處理工具的用法,感興趣的朋友可以來了解一下。

調用方式

1.命令行

awk [-F field-separator] ‘commands’ input-file(s)

commands是真正awk命令,[-F域分隔符]是可選的。input-file(s) 是待處理的文件。在awk中,文件的每一行中,由域分隔符分開的每一項稱為一個域。通常,在不指名-F域分隔符的情況下,默認的域分隔符是空格(或者tab)。

2.shell腳本方式

將所有的awk命令插入一個文件,並使awk程序可執行,然後awk命令解釋器作為腳本的首行,以便通過鍵入腳本名稱來調用。相當於shell腳本首行的:#!/bin/sh 可以換成:#!/bin/awk -f

3.將所有的awk命令插入一個單獨文件,然後調用:awk -f awk-script-file input-file(s)其中,-f選項加載awk-script-file中的awk腳本,input-file(s)跟上面的是一樣的。

內置變量

ARGC:命令行參數個數

ARGV:命令行參數排列

ENVIRON:UNIX環境變量

ERRNO:UNIX系統錯誤消息

FILENAME:awk浏覽的文件名

OFMT:數字的輸出格式 %.6g

FNR:浏覽文件的記錄數

FS:設置輸入域分隔符,等價於命令行 -F選項

NF:浏覽記錄的域的個數

NR:已讀的記錄數,就是行號,從1開始

FNR:當前記錄數

OFS:輸出域分隔符

ORS:輸出記錄分隔符

RS:控制記錄分隔符

$0:當前記錄(作為單個變量)

$1~$n:當前記錄的第n個字段,字段間由FS分隔

輸出函數

print:參數可以是變量、數值或者字符串。字符串必須用雙引號引用,參數用逗號分隔。如果沒有逗號,參數就串聯在一起而無法區分。這裡,逗號的作用與輸出文件的分隔符的作用是一樣的,只是後者是空格而已

printf:其用法和c語言中printf基本相似,可以格式化字符串,輸出復雜時,printf更加好用,代碼更易懂。具體格式如下:

%d 十進制有符號整數

%u 十進制無符號整數

%f 浮點數

%s 字符串

%c 單個字符

%p 指針的值

%e 指數形式的浮點數

%x %X 無符號以十六進制表示的整數

%o 無符號以八進制表示的整數

%g 自動選擇合適的表示法

獲取外部變量

1.獲取普通外部變量

awk ‘{action}’ 變量名=變量值

2.BEGIN程序塊中變量

awk –v 變量名=變量值 [–v 變量2=值2 …] ‘BEGIN{action}’

3.環境變量

需要用到內置變量ENVIRON實現

運算符

1.賦值運算符

= += -= *= /= %= ^= **=

2.邏輯運算符

||:邏輯或

&&:邏輯與

3.正則運算符

~:匹配正則表達式

~!:不匹配正則表達式

4.關系運算符

《 《= 》 》= != ==

5.算術運算符

+ - * / & ++ --

6.其它運算符

$:字段引用

空格:字符串連接符

?:C條件表達式

in:數組中是否存在某鍵值

字符操作

1.字符串轉數字

將變量通過”+”連接運算。自動強制將字符串轉為整型。非數字變成0,發現第一個非數字字符,後面自動忽略

2.數字轉字符串

只需要將變量與””符號連接起來運算即可

3.字符串連接

只需要將變量與””符號連接起來運算即可

數組操作

在awk中數組叫做關聯數組,因為下標既可以是數也可以是串。awk中的數組不必提前聲明,也不必聲明大小。數組元素用0或空串來初始化,這根據上下文而定。需要注意的是不同版本下面函數不一定相同。其相關的函數有length、asort、delete、split。當然也可以實現多維數組。

流程控制語句

1.條件判斷語句(if)

if(表達式){語句1}else{語句2}

if(表達式){語句1}else if(表達式){語句2}else{語句3}

2.循環語句(while、for、do while)

while(表達式){語句}

for(變量 in 數組){語句}

for(變量;條件;表達式){語句}

do{語句}while(條件)

3.關鍵字

break:當break語句用於while或for語句時,導致退出程序循環。

continue:當continue語句用於while或for語句時,使程序循環移動到下一個迭代。

next:能能夠導致讀入下一個輸入行,並返回到腳本的頂部。這可以避免對當前輸入行執行其他的操作過程。

exit:語句使主輸入循環退出並將控制轉移到END,如果END存在的話。如果沒有定義END規則,或在END中應用exit語句,則終止腳本的執行。

正則表達式

+:包含一個或多個字符或擴展正則表達式的具體值(在 +(加號)前)在這個字符串中,則字符串匹配。命令行:awk ’/smith+ern/‘ testfile

?:包含零個或一個字符或擴展正則表達式的具體值(在 ?(問號)之前)在字符串中,則字符串匹配。命令行:awk ’/smith?/‘ testfile

|:以 |(垂直線)隔開的字符串的任何一個在字符串中,則字符串匹配。命令行:awk ’/allen | alan /‘ testfile

():在正則表達式中將字符串組合在一起。命令行:awk ’/a(ll)?/‘ testfile

{m}:有m個模式的具體值位於字符串中,則字符串匹配。命令行:awk ’/l{2}/‘ testfile

{m,}:至少m個模式的具體值在字符串中,則字符串匹配。命令行:awk ’/t{2,}/‘ testfile

{m, n}:在m和n之間(包含的m和n)個模式的具體值在字符串中(其中m 《= n),則字符串匹配。命令行:awk ’/er{1, 2}/‘ testfile

[String]:正則表達式與方括號內String變量指定的任何字符匹配。命令行:awk ’/sm[a-h]/‘ testfile

[^ String]:在 [ ](方括號)和在指定字符串開頭的 ^ (插入記號) 指明正則表達式與方括號內的任何字符不匹配。這樣,命令行:awk ’/sm[^a-h]/‘ testfile

~,!~:表示指定變量與正則表達式匹配或不匹配的條件語句。命令行:awk ’$1 ~ /n/‘ testfile

^:指定字段或記錄的開頭。命令行:awk ’$2 ~ /^h/‘ testfile

$:指定字段或記錄的末尾。命令行:awk ’$2 ~ /y$/‘ testfile

。:表示除了在空白末尾的終端換行字符以外的任何一個字符。命令行:awk ’/a..e/‘ testfile

\ :轉義字符。當位於在擴展正則表達式中具有特殊含義的任何字符之前時,轉義字符除去該字符的任何特殊含義。例如,命令行:/a\/\//

內置函數

1.算術函數

atan2( y, x ) 返回 y/x 的反正切。

cos( x ) 返回 x 的余弦;x 是弧度。

sin( x ) 返回 x 的正弦;x 是弧度。

exp( x ) 返回 x 冪函數。

log( x ) 返回 x 的自然對數。

sqrt( x ) 返回 x 平方根。

int( x ) 返回 x 的截斷至整數的值。

rand( ) 返回任意數字 n,其中 0 《= n 《 1。

srand( [Expr] ) 將 rand 函數的種子值設置為 Expr 參數的值,或如果省略 Expr 參數則使用某天的時間。返回先前的種子值。

2.字符串函數

gsub( Ere, Repl, [ In ] ) 除了正則表達式所有具體值被替代這點,它和 sub 函數完全一樣地執行,。

sub( Ere, Repl, [ In ] ) 用 Repl 參數指定的字符串替換 In 參數指定的字符串中的由 Ere 參數指定的擴展正則表達式的第一個具體值。sub 函數返回替換的數量。出現在 Repl 參數指定的字符串中的 &(和符號)由 In 參數指定的與 Ere 參數的指定的擴展正則表達式匹配的字符串替換。如果未指定 In 參數,缺省值是整個記錄($0 記錄變量)。

index( String1, String2 ) 在由 String1 參數指定的字符串(其中有出現 String2 指定的參數)中,返回位置,從 1 開始編號。如果 String2 參數不在 String1 參數中出現,則返回 0(零)。

length [(String)] 返回 String 參數指定的字符串的長度(字符形式)。如果未給出 String 參數,則返回整個記錄的長度($0 記錄變量)。

blength [(String)] 返回 String 參數指定的字符串的長度(以字節為單位)。如果未給出 String 參數,則返回整個記錄的長度($0 記錄變量)。

substr( String, M, [ N ] ) 返回具有 N 參數指定的字符數量子串。子串從 String 參數指定的字符串取得,其字符以 M 參數指定的位置開始。M 參數指定為將 String 參數中的第一個字符作為編號 1。如果未指定 N 參數,則子串的長度將是 M 參數指定的位置到 String 參數的末尾 的長度。

match( String, Ere ) 在 String 參數指定的字符串(Ere 參數指定的擴展正則表達式出現在其中)中返回位置(字符形式),從 1 開始編號,或如果 Ere 參數不出現,則返回 0(零)。RSTART 特殊變量設置為返回值。RLENGTH 特殊變量設置為匹配的字符串的長度,或如果未找到任何匹配,則設置為 -1(負一)。

split( String, A, [Ere] ) 將 String 參數指定的參數分割為數組元素 A[1], A[2], 。 。 。, A[n],並返回 n 變量的值。此分隔可以通過 Ere 參數指定的擴展正則表達式進行,或用當前字段分隔符(FS 特殊變量)來進行(如果沒有給出 Ere 參數)。除非上下文指明特定的元素還應具有一個數字值,否則 A 數組中的元素用字符串值來創建。

tolower( String ) 返回 String 參數指定的字符串,字符串中每個大寫字符將更改為小寫。大寫和小寫的映射由當前語言環境的 LC_CTYPE 范疇定義。

toupper( String ) 返回 String 參數指定的字符串,字符串中每個小寫字符將更改為大寫。大寫和小寫的映射由當前語言環境的 LC_CTYPE 范疇定義。

sprintf(Format, Expr, Expr, 。 。 。 ) 根據 Format 參數指定的 printf 子例程格式字符串來格式化 Expr 參數指定的表達式並返回最後生成的字符串。

3.時間函數

mktime( YYYY MM DD HH MM SS[ DST]) 生成時間格式

strftime([format [, timestamp]]) 格式化時間輸出,將時間戳轉為時間字符串,具體格式如下:

%a 星期幾的縮寫(Sun)

%A 星期幾的完整寫法(Sunday)

%b 月名的縮寫(Oct)

%B 月名的完整寫法(October)

%c 本地日期和時間

%d 十進制日期

%D 日期 08/20/99

%e 日期,如果只有一位會補上一個空格

%H 用十進制表示24小時格式的小時

%I 用十進制表示12小時格式的小時

%j 從1月1日起一年中的第幾天

%m 十進制表示的月份

%M 十進制表示的分鐘

%p 12小時表示法(AM/PM)

%S 十進制表示的秒

%U 十進制表示的一年中的第幾個星期(星期天作為一個星期的開始)

%w 十進制表示的星期幾(星期天是0)

%W 十進制表示的一年中的第幾個星期(星期一作為一個星期的開始)

%x 重新設置本地日期(08/20/99)

%X 重新設置本地時間(12:00:00)

%y 兩位數字表示的年(99)

%Y 當前月份

%Z 時區(PDT)

%% 百分號(%)

systime() 得到時間戳,返回從1970年1月1日開始到當前時間(不計閏年)的整秒數

4.其他函數

close( Expression ) 用同一個帶字符串值的 Expression 參數來關閉由 print 或 printf 語句打開的或調用 getline 函數打開的文件或管道。如果文件或管道成功關閉,則返回 0;其它情況下返回非零值。如果打算寫一個文件,並稍後在同一個程序中讀取文件,則 close 語句是必需的。

system(Command ) 執行 Command 參數指定的命令,並返回退出狀態。等同於 system 子例程。

Expression | getline [ Variable ] 從來自 Expression 參數指定的命令的輸出中通過管道傳送的流中讀取一個輸入記錄,並將該記錄的值指定給 Variable 參數指定的變量。如果當前未打開將 Expression 參數的值作為其命令名稱的流,則創建流。創建的流等同於調用 popen 子例程,此時 Command 參數取 Expression 參數的值且 Mode 參數設置為一個是 r 的值。只要流保留打開且 Expression 參數求得同一個字符串,則對 getline 函數的每次後續調用讀取另一個記錄。如果未指定 Variable 參數,則 $0 記錄變量和 NF 特殊變量設置為從流讀取的記錄。

getline [ Variable ] 《 Expression 從 Expression 參數指定的文件讀取輸入的下一個記錄,並將 Variable 參數指定的變量設置為該記錄的值。只要流保留打開且 Expression 參數對同一個字符串求值,則對 getline 函數的每次後續調用讀取另一個記錄。如果未指定 Variable 參數,則 $0 記錄變量和 NF 特殊變量設置為從流讀取的記錄。

getline [ Variable ] 將 Variable 參數指定的變量設置為從當前輸入文件讀取的下一個輸入記錄。如果未指定 Variable 參數,則 $0 記錄變量設置為該記錄的值,還將設置 NF、NR 和 FNR 特殊變量。

5.排序函數

asort:對數組的值進行排序,並且會丟掉原先鍵值;

asorti:對數組的下標進行排序。

例如

1.內置變量

a.$0

awk ’/^root/{print $0}‘ /etc/passwd #/^root/為選擇表達式,$0代表是逐行

b.設置字段分隔符號(FS)

awk ’BEGIN {FS=“:”} /^root/ {print $1, NF}‘ /etc/passwd #FS為字段分隔符,可以自己設置,默認是空格,因為passwd裡面是”:”分隔,所以需要修改默認分隔符。NF是字段總數,$0代表當前行記錄,$1-$n是當前行,各個字段對應值。

c.記錄條數(NR、FNR)

awk ’BEGIN {FS=“:”} {print NR, $1, FNR}‘ /etc/passwd #NR得到當前記錄所在行

d.設置輸出字段分隔符(OFS)

awk ’BEGIN {FS=“:”; OFS=“~~”} /^root/ {print FNR, $1, $NF}‘ /etc/passwd #OFS設置默認字段分隔符

e.設置輸出行記錄分隔符(ORS)

awk ’BEGIN {FS=“:”; ORS=“~~”} {print FNR, $1, $NF}‘ #ORS默認是換行符,這裡修改為:”~~”,所有行之間用”~~”分隔了

f.輸入參數獲取(ARGC,ARGV)

awk ’BEGIN {FS=“:”; print “ARGC=”ARGC; for (k in ARGV) {print k“=”ARGV[k];}}‘ /etc/passwd #ARGC得到所有輸入參數個數,ARGV獲得輸入參數內容,是一個數組

g.獲得傳入的文件名(FILENAME)

awk ’BEGIN {FS=“:”; print FILENAME} {print FILENAME}‘ /etc/passwd #FILENAME,$0-$N,NF 不能使用在BEGIN中,BEGIN中不能獲得任何與文件記錄操作的變量。

h.獲得linux環境變量(ENVIRON)

awk ’BEGIN {print ENVIRON[“PATH”];}‘ /etc/passwd #ENVIRON是子典型數組,可以通過對應鍵值獲得它的值。

i.輸出數據格式設置(OFMT)

awk ’BEGIN {OFMT=“%.3f”; print 2/3,123.11111111;}‘ /etc/passwd #OFMT默認輸出格式是:%.6g 保留六位小數,這裡修改OFMT會修改默認數據輸出格式

j.按寬度指定分隔符

echo 20100117054932 | awk ’BEGIN {FIELDWIDTHS=“4 2 2 2 2 3”} {print $1“-”$2“-”$3,$4“:”$5“:”$6}‘ #FIELDWIDTHS其格式為空格分隔的一串數字,用以對記錄進行域的分隔,FIELDWIDTHS=“4 2 2 2 2 2”就表示$1寬度是4,$2是2,$3是2 。。.。 。這個時候會忽略:FS分隔符

k.RSTART RLENGTH

awk ’BEGIN{start=match(“this is a test”,/[a-z]+$/); print start, RSTART, RLENGTH }‘

awk ’BEGIN{start=match(“this is a test”,/^[a-z]+$/); print start, RSTART, RLENGTH }‘ #RSTART被匹配正則表達式首位置,RLENGTH匹配字符長度,沒有找到為-1.

2.獲取外部變量

a.獲取普通的外部變量

test=’awk code‘

echo | awk ’{print test}‘ test=“$test”

echo | wawk ’BEGIN {print test}‘ test=“$test” #傳入的變量可以在action中獲取值,但是變量名與值放到’{action}‘後邊。其中BEGIN的action是不能獲得

b.BEGIN程序塊的變量

test=’awk code‘

echo | awk -v test=“$test” ’BEGIN {print test}‘

echo | awk -v test=“$test” ’{print test}‘ #用-v 傳入變量可以在3中類型的action 中都可以獲得到,但順序在 action前面

c.獲得環境變量

awk ’BEGIN {for (i in ENVIRON) {print i“=”ENVIRON[i];}}‘

3.運算符

a.賦值運算符、算術運算

echo | awk ’BEGIN {a=1; b=5; c=3} {a+=5; b++; c--} END {print a, b, c, a*b}‘

b.邏輯運算符

awk ’BEGIN {a=1; b=2; print (a》5 && b《=2),(a》5 || b《=2);}‘

c.關系運算符

awk ’BEGIN{a=“11”;if(a 》= 9){print “ok”;}}‘ #》 《 可以作為字符串比較,也可以用作數值比較,關鍵看操作數如果是字符串 就會轉換為字符串比較。兩個都為數字 才轉為數值比較。字符串比較:按照ascii碼順序比較

d.其它運算符

awk ’BEGIN {a=“b”; print a==“b” ? “ok” : “err”;}‘ #三目運算

awk ’BEGIN {a=“b”; arr[0]=“b”; arr[1]=“c”; print (a in arr);}‘ #判斷數組中是否存在該鍵值

3.字符操作

a.字符串轉數字

awk ’BEGIN {a=“100”; b=“10test10”; print (a+b+0);}‘

awk ’BEGIN {a=“100”; b=“10test10”; print a+b+0;}‘

b.數字轉字符串

awk ’BEGIN {a=100; b=100; c=(a“”b); print c}‘

awk ’BEGIN {a=100; b=100; c=a“”b; print c}‘

c.字符串連接

awk ’BEGIN {a=“a”; b=“b”; c=a“”b; print c}‘

3.數組操作

a.賦值

awk ’BEGIN {tB[“a”]=“a1”; tB[“b”]=1;}‘

b.數組長度(length)

awk ’BEGIN {tB[“a”]=“a1”; tB[“b”]=1; print length(tB)}‘

awk ’BEGIN {info=“it is a test”; split(info,tA,“ ”); print asort(tA);}‘ #asort對數組進行排序,返回數組長度

c.字符串分割為數組(split)

awk ’BEGIN {info=“it is a test”; lens=split(info,tA,“ ”); print length(tA), lens;}‘ #length返回字符串以及數組長度,split進行分割字符串為數組,也會返回分割得到數組長度

d.數組輸出

awk ’BEGIN {info=“it is a test”; split(info,tA,“ ”); for(k in tA){print k, tA[k];}}‘ #for…in 輸出,因為數組是關聯數組,默認是無序的。

awk ’BEGIN {info=“it is a test”; tlen=split(info,tA,“ ”); for(k=1; k《=tlen; k++){print k, tA[k];}}‘ #如果需要得到有序數組,需要通過下標獲得。數組下標是從1開始,與c數組不一樣

e.判斷鍵值是否存在

awk ’BEGIN {tB[“a”]=“a1”; tB[“b”]=“b1”; if(tB[“c”]!=“1”){print “no found”;}; for(k in tB){print k,tB[k];}}‘ #tB[“c”]沒有定義,但是循環時候,發現已經存在該鍵值,它的值為空,這裡需要注意,awk數組是關聯數組,只要通過數組引用它的key,就會自動創建改序列

awk ’BEGIN {tB[“a”]=“a1”; tB[“b”]=“b1”; if( “c” in tB){print “ok”;}; for(k in tB){print k,tB[k];}}‘ #if(key in array) 通過這種方法判斷數組中是否包含”key”鍵值,才能正確的判斷

f.刪除鍵值

awk ’BEGIN {tB[“a”]=“a1”; tB[“b”]=“b1”; delete tB[“a”]; for(k in tB){print k, tB[k];}}‘

g.二維數組

awk ’BEGIN{

for(i=1;i《=9;i++)

{

for(j=1;j《=9;j++)

{

tarr[i,j]=i*j;

print i,“*”,j,“=”,tarr[i,j];

}

}

}‘

#array[k,k2]引用獲得數組內容

4.流程控制操作

a.awk ’BEGIN{

score=100;

if(score》90)

{

print “優秀”;

}

else if(score》80)

{

print “良好”;

}

else if(score》70)

{

print “普通”;

}

else if(score》60)

{

print “及格”;

}else

{

print “不及格”;

}

}‘

b.awk ’BEGIN{

total=0;

while(i《=100)

{

total+=i;

i++;

}

print total;

}‘

c.awk ’BEGIN{

for(k in ENVIRON)

{

print k“=”ENVIRON[k];

}

}‘ #ENVIRON是awk常量,是數組

d.awk ’BEGIN{

total=0;

for(i=0;i《=100;i++)

{

total+=i;

}

print total;

}‘

e.awk ’BEGIN{

total=0;

i=0;

do

{

total+=i;

i++;

}while(i《=100)

print total;

}‘

5.內置函數

a.算術函數

awk ’BEGIN{OFMT=“%.3f”;fs=sin(1);fe=exp(10);fl=log(10);fi=int(3.1415);print fs,fe,fl,fi;}‘ #OFMT 設置輸出數據格式是保留3位小數

awk ’BEGIN{srand();fr=int(100*rand());print fr;}‘ #獲得隨機數

b.字符串函數

awk ’BEGIN{info=“this is a test2010test!”;gsub(/[0-9]+/,“!”,info);print info}‘ #在 info中查找滿足正則表達式,/[0-9]+/ 用””替換,並且替換後的值,賦值給info 未給info值,默認是$0

awk ’BEGIN{info=“this is a test2010test!”;print index(info,“test”)?“ok”:“no found”;}‘

awk ’BEGIN{info=“this is a test2010test!”;print match(info,/[0-9]+/)?“ok”:“no found”;}‘ #正則匹配

awk ’BEGIN{info=“this is a test2010test!”;print substr(info,4,10);}‘ #從第 4個 字符開始,截取10個長度字符串

awk ’BEGIN{info=“this is a test”;split(info,tA,“ ”);print length(tA);for(k in tA){print k,tA[k];}}‘ #分割info,動態創建數組tA

c.時間函數

awk ’BEGIN{tstamp=mktime(“2001 01 01 12 12 12”);print strftime(“%c”,tstamp);}‘

awk ’BEGIN{tstamp1=mktime(“2001 01 01 12 12 12”);tstamp2=mktime(“2001 02 01 0 0 0”);print tstamp2-tstamp1;}‘ #求2個時間段中間時間差

d.其他函數

awk ’BEGIN{while(“cat /etc/passwd”|getline){print $0;};close(“/etc/passwd”);}‘ #打開外部文件

awk ’BEGIN{while(getline 《 “/etc/passwd”){print $0;};close(“/etc/passwd”);}‘ #逐行讀取外部文件

awk ’BEGIN{print “Enter your name:”;getline name;print name;}‘

awk ’BEGIN{b=system(“ls -al”);print b;}‘ #調用外部應用程序

6.輸出函數

a.printf

awk ’BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf(“%.2f,%.2u,%.2g,%X,%o\n”,n1,n2,n3,n1,n1);}‘ #類似於C語音

7.awk腳本

#!/bin/awk -f

BEGIN{

for(i=1;i《=9;i++)

{

for(j=1;j《=9;j++)

{

tarr[i,j]=i*j;

print i,“*”,j,“=”,tarr[i,j];

}

}

}

注意

1.在awk中有兩個特別的表達式,BEGIN和END,這兩者都可用於pattern中,提供BEGIN和END的作用是給程序賦予初始狀態和程序結束之後執行一些掃尾的工作。任何在BEGIN之後列出的操作(在{}內)將在awk開始掃描輸入之前執行,而END之後的操作將在掃描完全部的輸入之後執行。因此通常BEGIN來顯示變量和初始化變量,使用END來輸出最終結果。

2.awk中數據類型,是不需要定義,自適應的。 有時候需要通過(+、“”)強制轉換。

3.awk數組下標是從1開始,與c數組不一樣。

4.awk的多維數組在本質上是一維數組,更確切一點,awk在存儲上並不支持多維數組。awk提供了邏輯上模擬二維數組的訪問方式。例 如,array[2,4] = 1這樣的訪問是允許的。awk使用一個特殊的字符串SUBSEP (\034)作為分割字段,在上面的例子中,關聯數組array存儲的鍵值實際上是2\0344。多維數組可以使用if((i,j) in array)這樣的語法,但是下標必須放置在圓括號中。多維數組使用 for ( item in array )這樣的語法遍歷數組。與一維數組不同的是,多維數組必須使用split()函數來訪問單獨的下標分量。split ( item, subscr, SUBSEP)

5.awk實現的性能是比shell實現的強

上面就是Linux下awk文本處理工具的用法介紹了,因為awk是Linux下功能最強大的數據處理引擎之一,所以其用法要講解起來可不止文中介紹的這些,本文只是介紹了它的基本用法。

Copyright © Linux教程網 All Rights Reserved