awkのいくつかの使用記録(更新ing)


   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("
")}else{printf("%s %s ",$1,$2);}tt=t}'   50000    50    5000    500  

考え方:2つのファイルをマージしてソートする
[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("
")}else{printf("%s %s",$1,$2);printf("
")}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 "#")