当前位置: 技术问答>linux和unix
一段awk脚本代码 不解 请指教
来源: 互联网 发布时间:2016-02-07
本文导语: 源代码如下: [root@kaven ctest]# cat belts.awk #!/bin/awk -f BEGIN{ FS="#" belt["Yellow"] belt["Orange"] belt["Red"] student["Junior"] student["Senior"] } { for(...
源代码如下:
[root@kaven ctest]# cat belts.awk
#!/bin/awk -f
BEGIN{
FS="#"
belt["Yellow"]
belt["Orange"]
belt["Red"]
student["Junior"]
student["Senior"]
}
{
for(colour in belt)
{
if( $1 == colour )
belt[colour]++
}
}
{
for(senior_or_junior in student)
{
if( $2 == senior_or_junior)
student[senior_or_junior]++
}
}
END{
for( colour in belt )
print "the club has", belt[colour],colour,"Belts"
for( senior_or_junior in student)
print "the club has", student[senior_or_junior],senior_or_junior,"students"
}
[root@kaven ctest]# cat grade_student.txt
Yellow#Junior
Orange#Senior
Yellow#Junior
Purple#Junior
Brown-2#Junior
White#Senior
Orange#Senior
Red#Junior
Brown-2#Senior
Yellow#Senior
Red#Junior
Blue#Senior
Green#Senior
Purple#Junior
White#Junior
[root@kaven ctest]# ./belts.awk grade_student.txt
the club has 2 Red Belts
the club has 2 Orange Belts
the club has 3 Yellow Belts
the club has 7 Senior students
the club has 8 Junior students
请问
(1)belt["Yellow"]
belt["Orange"]
belt["Red"]是否是开辟一个belt的数组,数组大小为3
(2)colour in belt 中colour是否是依次取值为Yellow,Orange,Red
但又是如何赋值的?
[root@kaven ctest]# cat belts.awk
#!/bin/awk -f
BEGIN{
FS="#"
belt["Yellow"]
belt["Orange"]
belt["Red"]
student["Junior"]
student["Senior"]
}
{
for(colour in belt)
{
if( $1 == colour )
belt[colour]++
}
}
{
for(senior_or_junior in student)
{
if( $2 == senior_or_junior)
student[senior_or_junior]++
}
}
END{
for( colour in belt )
print "the club has", belt[colour],colour,"Belts"
for( senior_or_junior in student)
print "the club has", student[senior_or_junior],senior_or_junior,"students"
}
[root@kaven ctest]# cat grade_student.txt
Yellow#Junior
Orange#Senior
Yellow#Junior
Purple#Junior
Brown-2#Junior
White#Senior
Orange#Senior
Red#Junior
Brown-2#Senior
Yellow#Senior
Red#Junior
Blue#Senior
Green#Senior
Purple#Junior
White#Junior
[root@kaven ctest]# ./belts.awk grade_student.txt
the club has 2 Red Belts
the club has 2 Orange Belts
the club has 3 Yellow Belts
the club has 7 Senior students
the club has 8 Junior students
请问
(1)belt["Yellow"]
belt["Orange"]
belt["Red"]是否是开辟一个belt的数组,数组大小为3
(2)colour in belt 中colour是否是依次取值为Yellow,Orange,Red
但又是如何赋值的?
|
1)belt是个哈希表,分别初始以"Yellow", "Orange", "Red"为索引的三个变量,为0
2) 是的
赋值相当于belt["Yellow"]++
2) 是的
赋值相当于belt["Yellow"]++
|
这个不应该理解成数组,因为单元里没有储存数据。
应该理解成enum枚举类型。
应该理解成enum枚举类型。