[Shell] awk 陣列(2)
參考
1.建立陣列
array[index] = value 陣列名array,下標index以及相應的值value。
[/tmp/test]# awk 'BEGIN{a[1]="a";a[2]="b";for(i in a)print i"="a[i]}'
2=b
1=a
2.讀取陣列
[/tmp/test]# awk 'BEGIN{a[1]=1;a[2]=2;a[3]=3;for(i in a)print i"="a[i]}'
2=2
3=3
1=1
3.多維陣列,array[index1,index2,……]:SUBSEP是陣列下標分割符,預設為“\034”。可以事先設定SUBSEP,也可以直接在SUBSEP的位置輸入你要用的分隔符
[/tmp/test]# awk 'BEGIN{a[1,1]=2;a[1,2]=3;a[1,3]=4;a[2,1]=3;a[2,2]=4;a[2,3]=5;a[3,1]=4;a[3,2]=5;a[3,3]=6;for(i in a)print i"="a[i]}'
11=2
12=3
13=4
21=3
22=4
23=5
31=4
32=5
33=6
[/tmp/test]# awk 'BEGIN{SUBSEP=":";a[1,1]=2;a[1,2]=3;a[1,3]=4;a[2,1]=3;a[2,2]=4;a[2,3]=5;a[3,1]=4;a[3,2]=5;a[3,3]=6;for(i in a)print i"="a[i]}'
3:1=4
3:2=5
3:3=6
1:1=2
1:2=3
1:3=4
2:1=3
2:2=4
2:3=5
[/tmp/test]# awk 'BEGIN{a[1,1]=1;a[1,1]=1;for(i in a)print i"="a[i]}'
11=1
awk 'BEGIN{SUBSEP=":";array["a","b"]=1;for(i in array) print i}'
a:b
[/]# awk 'BEGIN{array["a"":""b"]=1;for(i in array) print i}'
a:b
[/]# awk 'BEGIN{SUBSEP=":";array["a","b:c"]=1;array["a:b","c"]=2;for (i in array) print i,array[i]}'
a:b:c 2
4.刪除陣列和陣列元素
delete array
delete array[item]
5.排序
awk中的asort函式可以實現對陣列的值進行排序,不過排序之後的陣列下標改為從1到陣列的長度。
在gawk 3.1.2以後的版本還提供了一個asorti函式,這個函式不是依據關聯陣列的值,而是依據關聯陣列的下標排序,
即asorti(array)以後,仍會用數字(1到陣列長度)來作為下標,但是array的陣列值變為排序後的原來的下標,
除非你指定另一個引數如:asorti(a,b)
eg:
1.去除重複
[/tmp/test]# cat tt3
[/tmp/test]# awk '!a[$0]++' tt3
[/tmp/test]# awk '!($0 in a){a[$0];print}' tt3
2.sum
[/tmp/test]# cat tt1
50 IT China 800
10 ACCOUNTING LA 1100
20 RESEARCH DALLAS 560
30 SALES CHICAGO 2800
40 OPERATIONS BOSTON 5500
10 DEVELOPER HOSTON 1300
[/tmp/test]# awk '{a[$1]+=$4}END{for(i in a)print i,a[i]}' tt1 | sort -k1
10 2400
20 560
30 2800
40 5500
50 800
3.查詢檔案差異
[/tmp/test]# more tt8 tt9
1
2
3
4
5
6
7
...skipping...
2
4
5
6
7
8
查詢tt8中在tt9不存在的檔案
[/tmp/test]# awk 'NR==FNR{a[$0]=1}{if(!a[$0])print}' tt8 tt9
8
反之
[/tmp/test]# awk 'NR==FNR{a[$0]=1}{if(!a[$0])print}' tt9 tt8
1
3
4.有序輸出
awk '{a[$1]=$2;c[j++]=$1}END{for(m=0;m<j;m++) print="" c[m],a[c[m]]}'="" tt1
5. 多個文字編輯:這裡主要指的是待處理的文字之間的格式上有區別,如分隔符不同,;或是待處理文字需提取的資訊的位置不同,如不同的列或行。
<例1>:
cat file1
g1.1 2
g2.2 4
g2.1 5
g4.1 3
cat file2
g1.1 2
g1.2 3
g4.1 4
cat file3
g1.2 3
g5.1 3
要求輸出:
g1.1 2 2 -
g1.2 - 3 3
g2.2 4 - -
g2.1 5 - -
g4.1 3 4 -
g5.1 - - 3
實現程式碼如下:
awk '{a[ARGIND" "$1]=$2 # ARGIND是當前命令列檔案的位置(從0開始),將它和第一列的value作為下標,建立陣列a。
b[$1] #將第一列的value作為下標,建立陣列b,目的是在讀完所有檔案之後,能得到第一列value的uniqe-list。
}
END{
for(i in b) {
printf i" "
for(j=1;j<=ARGIND;j++) printf "%s ", a[j" "i]?a[j" "i]:"-" #此時的ARGIND值為3.
print ""
}
}' file1 file2 file3
這裡是利用awk的內建變數ARGIND來處理完成對檔案的處理。關於ARGIND,ARGV,ARGC的使用,大家可以參考:
當然,我們也可以利用另外一個內建變數FILENAME來完成相同的任務(大家可以先想想怎麼寫),如下:
awk '{a[FILENAME" "$1]=$2;b[$1];c[FILENAME]}END{for(i in b) {printf i" ";for(j in c) printf "%s ", a[j" "i]?a[j" "i]:"-";print""}}' file1 file2 file3
<例2>:對上面的資料的格式稍作改動,每個檔案的分隔符都一樣的情況,但輸出要求不變:
cat file1
g1.1|2
g2.2|4
g2.1|5
g4.1|3
cat file2
g1.1#2
g1.2#3
g4.1#4
cat file3
g1.2@3
g5.1@3
實現程式碼如下:
awk '{a[ARGIND" "$1]=$2
b[$1]
}
END{
for(i in b) {
printf i" "
for(j=2;j<=ARGIND;j+=2) printf "%s ", a[j" "i]?a[j" "i]:"-" # 由於FS的設定也是有對應ARGIND值,所以對ARGIND稍作改動。
print ""
}
}' FS="|" file1 FS="#" file2 FS="@" file3 # 對每個檔案分別設定FS的值。
因為這個例子的資料比較簡單,我們也可以在BEGIN模組中完成對FS值設定,如下:
awk 'BEGIN{FS="[|#@]"}{a[ARGIND" "$1]=$2; b[$1]}END{for(i in b) {printf i" ";for(j=1;j<=ARGIND;j++) printf "%s ", a[j" "i]?a[j" "i]:"-"; print ""}}' file1 file2 file3
利用FILENAME 同樣可以解決問題:
awk '
FILENAME=="file1"{FS="|"} # 設定FS
FILENAME=="file2"{FS="#"} #設定FS
FILENAME=="file3"{FS="@"} #設定FS
# 稍顯繁瑣,不過一目瞭然
{$0=$0} #使FS生效。
{a[ARGIND" "$1]=$2; b[$1]}
END{ for(i in b) {printf i" "; for(j=1;j<=ARGIND;j++) printf "%s ", a[j" "i]?a[j" "i]:"-"; print ""}
}' file1 file2 file3
推薦一個關於陣列處理檔案的帖子 ,裡面有不少例子供大家學習。
6.文字翻轉或移位:二維或多維陣列的應用
<例1>:
Inputfile
1 2 3 4 5 6
2 3 4 5 6 1
3 4 5 6 1 2
4 5 6 1 2 3
Outputfile
4 3 2 1
5 4 3 2
6 5 4 3
1 6 5 4
2 1 6 5
3 2 1 6
awk '{
if (max_nf < NF)
max_nf = NF # 陣列第一維的長度
max_nr = NR # 陣列第二維的長度
for (x = 1; x <= NF; x++)
vector[x, NR] = $x #建立陣列vector
}
END {
for (x = 1; x <= max_nf; x++) {
for (y = max_nr; y >= 1; --y)
printf("%s ", vector[x, y])
printf("\n")
}
}'
<例2>:來自
有兩個文字a和b,要求輸出c文字,合併的規則是按照第一行的headline(按字母順序)合併文字a和b,空缺按“0”補齊。
cat a.txt
a b c d
1 2 9 7
4 5 8 9
5 3 6 1
cat b.txt
a e f d g
9 2 4 7 3
4 3 7 9 4
cat c.txt
a b c d e f g
1 2 9 7 0 0 0
4 5 8 9 0 0 0
5 3 6 1 0 0 0
9 0 0 7 2 4 3
4 0 0 9 3 7 4
下面我們來參看並解讀下Tim大師的程式碼:
awk '
FNR==1{ #FNR==1,即a和b文字的第一行,這個用的真的很巧妙。
for(i=1;i<=NF;i++){
b[i]=$i #讀取文字的每個元素存入陣列b
c[$i]++} #另建立陣列c,並統計每個元素的個數
next #可以理解為,讀取FNR!=1的文字內容。
}
{k++ # 統計除去第一行的文字行數
for(i=1;i<=NF;i++)a[k","b[i]]=$i #利用一個二維陣列來保持每個數字的位置, k,b[i]可以理解為每個數字的座標。
}
END{
l=asorti(c) #利用asorti函式對陣列的下標進行排序,並獲取陣列長度,即輸出檔案的列數(NF值)
for(i=1;i<=l;i++)printf c[i]" " # 先列印第一行,相當於headline。
print ""
for(i=1;i<=k;i++){
for(j=1;j<=l;j++)printf a[i","c[j]]?a[i","c[j]]" ":"0 " # 列印二維陣列的值。
print ""}
}' a.txt b.txt
7.選擇性列印:
列印某個關鍵字前幾行,以3行為例:
seq 20 |awk '/\<10\>/{for(i=NR-3;i<nr;i++)print a[i%3];exit}{a[nr%3]="$0}' 7
8
9
利用NR取餘數,建立陣列,這是一種非常高效的程式碼。
8. 透過split函式建立陣列:陣列的下標為從1開始的數字。
split(s, a [, r]) # s:string, a:array name,[,r]:regular expression。
echo 'abcd' |awk '{len=split($0,a,"");for(i=1;i<=len;i++) print "a["i"] = " a[i];print "length = " len}'
a[1] = a
a[2] = b
a[3] = c
a[4] = d
length = 4
9.awk陣列使用的小技巧和需要避免的用法:
<1> 巢狀陣列:
awk 'BEGIN{a[1]=3;b[1]=1;print a[b[1]]}'
3
<2> 下標設為變數或函式:
awk 'BEGIN{s=123;a[substr(s,2)]=substr(s,1,1);for(i in a)print "index : "i"\nvalue : "a[i]}'
index : 23
value : 1
<3> 不可以將陣列名作為變數使用,否則會報錯:
awk 'BEGIN{a["1"] = 3; delete a;a=3;print a}' #即使你已經使用了delete函式。
awk: fatal: attempt to use array `a' in a scalar context
<4> 陣列的長度:
length(array)
<5> match 函式也可以建立陣列(你知道麼?,版本要求高於gawk 3.1.2)
echo "foooobazbarrrrr |
gawk '{ match($0, /(fo+).+(bar*)/, arr) #匹配到的部分自動賦值到arr中,下標從1開始
print arr[1], arr[2]
print arr[1, "start"], arr[1, "length"] #二維陣列arr[index,"start"]值=RSTART
print arr[2, "start"], arr[2, "length"] #二維陣列arr[index,"length"]值=RLENGTH
}'
foooo barrrrr
1 5
9 7
<6>想到過用split清空陣列麼?
awk 'BEGIN{
split("abc",array,"")
print "array[1] = "array[1],"\narray[2] = "array[2],"\narray[3] = "array[3]
split("",array)
print "array[1] = "array[1],"\narray[2] ="array[2],"\narray[3] ="array[3]
}'
array[1] = a
array[2] = b
array[3] = c
array[1] =
array[2] =
array[3] =
1.建立陣列
array[index] = value 陣列名array,下標index以及相應的值value。
[/tmp/test]# awk 'BEGIN{a[1]="a";a[2]="b";for(i in a)print i"="a[i]}'
2=b
1=a
2.讀取陣列
[/tmp/test]# awk 'BEGIN{a[1]=1;a[2]=2;a[3]=3;for(i in a)print i"="a[i]}'
2=2
3=3
1=1
3.多維陣列,array[index1,index2,……]:SUBSEP是陣列下標分割符,預設為“\034”。可以事先設定SUBSEP,也可以直接在SUBSEP的位置輸入你要用的分隔符
[/tmp/test]# awk 'BEGIN{a[1,1]=2;a[1,2]=3;a[1,3]=4;a[2,1]=3;a[2,2]=4;a[2,3]=5;a[3,1]=4;a[3,2]=5;a[3,3]=6;for(i in a)print i"="a[i]}'
11=2
12=3
13=4
21=3
22=4
23=5
31=4
32=5
33=6
[/tmp/test]# awk 'BEGIN{SUBSEP=":";a[1,1]=2;a[1,2]=3;a[1,3]=4;a[2,1]=3;a[2,2]=4;a[2,3]=5;a[3,1]=4;a[3,2]=5;a[3,3]=6;for(i in a)print i"="a[i]}'
3:1=4
3:2=5
3:3=6
1:1=2
1:2=3
1:3=4
2:1=3
2:2=4
2:3=5
[/tmp/test]# awk 'BEGIN{a[1,1]=1;a[1,1]=1;for(i in a)print i"="a[i]}'
11=1
awk 'BEGIN{SUBSEP=":";array["a","b"]=1;for(i in array) print i}'
a:b
[/]# awk 'BEGIN{array["a"":""b"]=1;for(i in array) print i}'
a:b
[/]# awk 'BEGIN{SUBSEP=":";array["a","b:c"]=1;array["a:b","c"]=2;for (i in array) print i,array[i]}'
a:b:c 2
4.刪除陣列和陣列元素
delete array
delete array[item]
5.排序
awk中的asort函式可以實現對陣列的值進行排序,不過排序之後的陣列下標改為從1到陣列的長度。
在gawk 3.1.2以後的版本還提供了一個asorti函式,這個函式不是依據關聯陣列的值,而是依據關聯陣列的下標排序,
即asorti(array)以後,仍會用數字(1到陣列長度)來作為下標,但是array的陣列值變為排序後的原來的下標,
除非你指定另一個引數如:asorti(a,b)
eg:
1.去除重複
[/tmp/test]# cat tt3
[/tmp/test]# awk '!a[$0]++' tt3
[/tmp/test]# awk '!($0 in a){a[$0];print}' tt3
2.sum
[/tmp/test]# cat tt1
50 IT China 800
10 ACCOUNTING LA 1100
20 RESEARCH DALLAS 560
30 SALES CHICAGO 2800
40 OPERATIONS BOSTON 5500
10 DEVELOPER HOSTON 1300
[/tmp/test]# awk '{a[$1]+=$4}END{for(i in a)print i,a[i]}' tt1 | sort -k1
10 2400
20 560
30 2800
40 5500
50 800
3.查詢檔案差異
[/tmp/test]# more tt8 tt9
1
2
3
4
5
6
7
...skipping...
2
4
5
6
7
8
查詢tt8中在tt9不存在的檔案
[/tmp/test]# awk 'NR==FNR{a[$0]=1}{if(!a[$0])print}' tt8 tt9
8
反之
[/tmp/test]# awk 'NR==FNR{a[$0]=1}{if(!a[$0])print}' tt9 tt8
1
3
4.有序輸出
awk '{a[$1]=$2;c[j++]=$1}END{for(m=0;m<j;m++) print="" c[m],a[c[m]]}'="" tt1
5. 多個文字編輯:這裡主要指的是待處理的文字之間的格式上有區別,如分隔符不同,;或是待處理文字需提取的資訊的位置不同,如不同的列或行。
<例1>:
cat file1
g1.1 2
g2.2 4
g2.1 5
g4.1 3
cat file2
g1.1 2
g1.2 3
g4.1 4
cat file3
g1.2 3
g5.1 3
要求輸出:
g1.1 2 2 -
g1.2 - 3 3
g2.2 4 - -
g2.1 5 - -
g4.1 3 4 -
g5.1 - - 3
實現程式碼如下:
awk '{a[ARGIND" "$1]=$2 # ARGIND是當前命令列檔案的位置(從0開始),將它和第一列的value作為下標,建立陣列a。
b[$1] #將第一列的value作為下標,建立陣列b,目的是在讀完所有檔案之後,能得到第一列value的uniqe-list。
}
END{
for(i in b) {
printf i" "
for(j=1;j<=ARGIND;j++) printf "%s ", a[j" "i]?a[j" "i]:"-" #此時的ARGIND值為3.
print ""
}
}' file1 file2 file3
這裡是利用awk的內建變數ARGIND來處理完成對檔案的處理。關於ARGIND,ARGV,ARGC的使用,大家可以參考:
當然,我們也可以利用另外一個內建變數FILENAME來完成相同的任務(大家可以先想想怎麼寫),如下:
awk '{a[FILENAME" "$1]=$2;b[$1];c[FILENAME]}END{for(i in b) {printf i" ";for(j in c) printf "%s ", a[j" "i]?a[j" "i]:"-";print""}}' file1 file2 file3
<例2>:對上面的資料的格式稍作改動,每個檔案的分隔符都一樣的情況,但輸出要求不變:
cat file1
g1.1|2
g2.2|4
g2.1|5
g4.1|3
cat file2
g1.1#2
g1.2#3
g4.1#4
cat file3
g1.2@3
g5.1@3
實現程式碼如下:
awk '{a[ARGIND" "$1]=$2
b[$1]
}
END{
for(i in b) {
printf i" "
for(j=2;j<=ARGIND;j+=2) printf "%s ", a[j" "i]?a[j" "i]:"-" # 由於FS的設定也是有對應ARGIND值,所以對ARGIND稍作改動。
print ""
}
}' FS="|" file1 FS="#" file2 FS="@" file3 # 對每個檔案分別設定FS的值。
因為這個例子的資料比較簡單,我們也可以在BEGIN模組中完成對FS值設定,如下:
awk 'BEGIN{FS="[|#@]"}{a[ARGIND" "$1]=$2; b[$1]}END{for(i in b) {printf i" ";for(j=1;j<=ARGIND;j++) printf "%s ", a[j" "i]?a[j" "i]:"-"; print ""}}' file1 file2 file3
利用FILENAME 同樣可以解決問題:
awk '
FILENAME=="file1"{FS="|"} # 設定FS
FILENAME=="file2"{FS="#"} #設定FS
FILENAME=="file3"{FS="@"} #設定FS
# 稍顯繁瑣,不過一目瞭然
{$0=$0} #使FS生效。
{a[ARGIND" "$1]=$2; b[$1]}
END{ for(i in b) {printf i" "; for(j=1;j<=ARGIND;j++) printf "%s ", a[j" "i]?a[j" "i]:"-"; print ""}
}' file1 file2 file3
推薦一個關於陣列處理檔案的帖子 ,裡面有不少例子供大家學習。
6.文字翻轉或移位:二維或多維陣列的應用
<例1>:
Inputfile
1 2 3 4 5 6
2 3 4 5 6 1
3 4 5 6 1 2
4 5 6 1 2 3
Outputfile
4 3 2 1
5 4 3 2
6 5 4 3
1 6 5 4
2 1 6 5
3 2 1 6
awk '{
if (max_nf < NF)
max_nf = NF # 陣列第一維的長度
max_nr = NR # 陣列第二維的長度
for (x = 1; x <= NF; x++)
vector[x, NR] = $x #建立陣列vector
}
END {
for (x = 1; x <= max_nf; x++) {
for (y = max_nr; y >= 1; --y)
printf("%s ", vector[x, y])
printf("\n")
}
}'
<例2>:來自
有兩個文字a和b,要求輸出c文字,合併的規則是按照第一行的headline(按字母順序)合併文字a和b,空缺按“0”補齊。
cat a.txt
a b c d
1 2 9 7
4 5 8 9
5 3 6 1
cat b.txt
a e f d g
9 2 4 7 3
4 3 7 9 4
cat c.txt
a b c d e f g
1 2 9 7 0 0 0
4 5 8 9 0 0 0
5 3 6 1 0 0 0
9 0 0 7 2 4 3
4 0 0 9 3 7 4
下面我們來參看並解讀下Tim大師的程式碼:
awk '
FNR==1{ #FNR==1,即a和b文字的第一行,這個用的真的很巧妙。
for(i=1;i<=NF;i++){
b[i]=$i #讀取文字的每個元素存入陣列b
c[$i]++} #另建立陣列c,並統計每個元素的個數
next #可以理解為,讀取FNR!=1的文字內容。
}
{k++ # 統計除去第一行的文字行數
for(i=1;i<=NF;i++)a[k","b[i]]=$i #利用一個二維陣列來保持每個數字的位置, k,b[i]可以理解為每個數字的座標。
}
END{
l=asorti(c) #利用asorti函式對陣列的下標進行排序,並獲取陣列長度,即輸出檔案的列數(NF值)
for(i=1;i<=l;i++)printf c[i]" " # 先列印第一行,相當於headline。
print ""
for(i=1;i<=k;i++){
for(j=1;j<=l;j++)printf a[i","c[j]]?a[i","c[j]]" ":"0 " # 列印二維陣列的值。
print ""}
}' a.txt b.txt
7.選擇性列印:
列印某個關鍵字前幾行,以3行為例:
seq 20 |awk '/\<10\>/{for(i=NR-3;i<nr;i++)print a[i%3];exit}{a[nr%3]="$0}' 7
8
9
利用NR取餘數,建立陣列,這是一種非常高效的程式碼。
8. 透過split函式建立陣列:陣列的下標為從1開始的數字。
split(s, a [, r]) # s:string, a:array name,[,r]:regular expression。
echo 'abcd' |awk '{len=split($0,a,"");for(i=1;i<=len;i++) print "a["i"] = " a[i];print "length = " len}'
a[1] = a
a[2] = b
a[3] = c
a[4] = d
length = 4
9.awk陣列使用的小技巧和需要避免的用法:
<1> 巢狀陣列:
awk 'BEGIN{a[1]=3;b[1]=1;print a[b[1]]}'
3
<2> 下標設為變數或函式:
awk 'BEGIN{s=123;a[substr(s,2)]=substr(s,1,1);for(i in a)print "index : "i"\nvalue : "a[i]}'
index : 23
value : 1
<3> 不可以將陣列名作為變數使用,否則會報錯:
awk 'BEGIN{a["1"] = 3; delete a;a=3;print a}' #即使你已經使用了delete函式。
awk: fatal: attempt to use array `a' in a scalar context
<4> 陣列的長度:
length(array)
<5> match 函式也可以建立陣列(你知道麼?,版本要求高於gawk 3.1.2)
echo "foooobazbarrrrr |
gawk '{ match($0, /(fo+).+(bar*)/, arr) #匹配到的部分自動賦值到arr中,下標從1開始
print arr[1], arr[2]
print arr[1, "start"], arr[1, "length"] #二維陣列arr[index,"start"]值=RSTART
print arr[2, "start"], arr[2, "length"] #二維陣列arr[index,"length"]值=RLENGTH
}'
foooo barrrrr
1 5
9 7
<6>想到過用split清空陣列麼?
awk 'BEGIN{
split("abc",array,"")
print "array[1] = "array[1],"\narray[2] = "array[2],"\narray[3] = "array[3]
split("",array)
print "array[1] = "array[1],"\narray[2] ="array[2],"\narray[3] ="array[3]
}'
array[1] = a
array[2] = b
array[3] = c
array[1] =
array[2] =
array[3] =
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24237320/viewspace-2094229/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [Shell] awk 陣列(1)陣列
- AWK 陣列介紹陣列
- Shell陣列陣列
- awk 陣列和迴圈陣列
- [Shell] awk 實現列轉行例子
- [Shell] awk學習(2)-pattern{action}
- shell陣列(轉)陣列
- shell指令碼(6)-shell陣列指令碼陣列
- linux awk 陣列和迴圈Linux陣列
- Shell 陣列介紹陣列
- [shell基礎]——陣列陣列
- linux Shell 命令列-03-array Shell 陣列Linux命令列陣列
- Awk 陣列排序多種實現方法陣列排序
- shell切分字串到陣列字串陣列
- shell 陣列使用簡介陣列
- Linux Awk 陣列操作詳細介紹Linux陣列
- Linux awk命令中如何刪除陣列Linux陣列
- shell--函式與陣列函式陣列
- Linux Shell 建立序列陣列Linux陣列
- awk 系列:如何讓 awk 使用 Shell 變數變數
- awk引用shell變數變數
- awk使用shell變數變數
- 2-7 陣列:動態陣列陣列
- shell 使用陣列及字串擷取陣列字串
- Linux shell 中陣列的使用Linux陣列
- numpy陣列(2)陣列
- shell 中 grep、sed、awk 命令
- linux shell陣列深入學習理解Linux陣列
- Linux Shell 陣列建立及使用技巧Linux陣列
- 陣列的操作(2)陣列
- 【shell筆記>命令】grep,sed,awk筆記
- linux之shell awk 之一Linux
- linux之shell awk 之二Linux
- Shell字元操作命令——grep、sed、awk字元
- [Shell] awk學習(1)-pattern{action}
- Shell自學二(引數傳遞和陣列)陣列
- [20191202]awk使用陣列技巧.txt陣列
- Bash Shell指令碼中的陣列使用例項指令碼陣列