请使用awk命令将如下两份文件中名字相同的两行合并起来
   A文件:
      
孙行者 50岁
行者孙 500岁
者行孙 5000岁
孙者行 50000岁
   B文件:
   
行者孙 男
者行孙 男
孙行者 男
孙者行 男
输出效果:
    孙行者 50岁 男
[root@localhost ~]$ cat a b |sort -k1 |awk 'BEGIN{t=""}{t=$1;if(tt==t){printf("%s",$2);printf("\n")}else{printf("%s %s ",$1,$2);}tt=t}' 
孙者行 50000岁 男
孙行者 50岁 男
者行孙 5000岁 男
行者孙 500岁 男

思路:先合并两个文件并排序

[root@localhost ~]$ cat a b |sort -k1
孙者行 50000岁
孙者行 男
孙行者 50岁
孙行者 男
者行孙 5000岁
者行孙 男
行者孙 500岁
行者孙 男
先定义一个容器为$1,也就是名字,然后做判断如果下一行的$1与这个相同的话,只输出$2,并换行。因为定义为空,所以不符合所以判断else输出$1,$2 也就是 孙者行 50000。其后判断相同只输出 $2 并换行。
如果说要的输出效果是 孙行者 50岁
               男

那要怎么办呢?

 cat a b |sort -k1 |awk 'BEGIN{t=""}{t=$1;if(tt==t){printf("\t");printf("%s",$2);printf("\n")}else{printf("%s %s",$1,$2);printf("\n")}tt=t}'  
孙者行 50000岁
        男
孙行者 50岁
        男
者行孙 5000岁
        男
行者孙 500岁
        男
思路其实都是一样的。
cat blog.log
http://www.baidu.org/index.html 
http://www.baidu.org/1.html 
http://post.baidu.org/index.html 
http://mp3.baidu.org/index.html 
http://www.baidu.org/2.html 
http://post.baidu.org/2.html


如果要得到中间的域名怎么写呢?

awk -F '[/]+' 'BEGIN{print "site""\t""count"}{array[$2]++}END{for(key in array) print key,"\t" array[key]}' blog.log
site    count
www.baidu.org   3
post.baidu.org  2
mp3.baidu.org   1

以‘/’为分隔符,这里定义一个数组。

另外的一种方法:

awk '{split($0,array,"/+");key=array[2];count[key]++}END{for(kk in count)print kk count[kk]}' blog.log


如果不是算这种个数,而是平均数呢?如下:

工号 名字 工资 求平均工资呢

cat average.txt
001 wudi 1000
002 jony 2000
003 wudi 2000
004 jony 3000
005 deng 2500

            

[root@MonitorANDBack ~]$ awk '{array[$2]+=$3;count[$2]++}END{for (key in array) print key,array[key],array[key]/count[key]}' average.txt  
jony 5000 2500
deng 2500 2500
wudi 3000 1500


这里可以看到名字,总数以及平均数 这里count[]为一个函数

一下为数组的简单理解:
[root@MonitorANDBack ~]$ array=(good morning sir)
[root@MonitorANDBack ~]$ echo ${array[0]}
good
[root@MonitorANDBack ~]$ echo ${array[1]}
morning
[root@MonitorANDBack ~]$ echo ${array[2]}
sir
[root@MonitorANDBack ~]$ echo ${array[3]}
[root@MonitorANDBack ~]$ echo ${array[@]}
good morning sir
[root@MonitorANDBack ~]$ echo ${array[#]}
-bash: #: syntax error: operand expected (error token is "#")