awk处理文本(1)

1. awk关联数组,捕捉长度和域值数目不知足要求的数组

1.awk =>
#!/usr/bin/awk 
length($1) > 2 {e++; print "long name in line", NR}
NF != 1 {e++; print "bad name count in line", NR}
END {if (e > 0) print "total errors: ", e}

# cat 1 =>
223  xiaobao
32 caoqing
42
52
2245
2

# awk -f 1.awk 1 => 
long name in line 1
bad name count in line 1
bad name count in line 2
long name in line 5
total errors:  4

2. 给定n个名字的文件,生成所有的n*n个名字

2.awk =>
#!/usr/bin/awk
{ name[$1] = 1 }
END { for (i in name)
        for(j in name)
          {print i, j};
}

# cat 2 =>
huanhuan
xiaobao
caoqing
grafield

# awk -f 2.awk 2 =>
grafield grafield
grafield huanhuan
grafield caoqing
grafield xiaobao
huanhuan grafield
huanhuan huanhuan
huanhuan caoqing
huanhuan xiaobao
caoqing grafield
caoqing huanhuan
caoqing caoqing
caoqing xiaobao
xiaobao grafield
xiaobao huanhuan
xiaobao caoqing
xiaobao xiaobao

3. 统计个数

3.awk =>
#!/usr/bin/awk
{count[$1] += $2}
END{ for (i in count)
  {print count[i], i};
}

# cat 3 =>
caoqing:20
xiaobao:100
caoqing:5 
wanghuan:4 
xiaobao:10

# awk -F":" -f 3.awk 3
4 wanghuan
25 caoqing
110 xiaobao

4. 统计单词个数

4.awk =>
#!/usr/bin/awk
{ for(i=1; i<NF; i++) count[$i]++ }
END { for ( i in count)
        {print count[i], i}
}

# cat 4
caoqing xiaobao wanghuan xiaobao xiaobao wanghuan xiaobao caoqing

# awk -f 4.awk 4
2 wanghuan
1 caoqing
4 xiaobao
相关文章
相关标签/搜索