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
相關文章
相關標籤/搜索