shell 处理文件重复字符实现累加----awk

shell 处理文件重复字符实现累加----awk

 

需求一个文本test:

zhangsan.li  22 33 232

lisi.hua        23 23  23

zhangsan.li  09 2    33

hujian,qi       89 3    34

lisi.hua        98  34  34

要转换成:

zhangsan.li  31 35 265

lisi.hua        112 57  57

hujian,qi       89 3    34

 

下面是shell脚本的代码:

 

#!/bin/bash
cat test
echo 'merge file'
cat test | awk '{a[$1]+=$2;b[$1]+=$3;c[$1]+=$4}END{for (i in a) print i,a[i],b[i],c[i];}'

 将结果重定向一个文件,并且按照第二列进行升序排序。

 
cat test | awk '{a[$1]+=$2;b[$1]+=$3;c[$1]+=$4}END{for (i in a) print i,a[i],b[i],c[i];}' \
 > result.txt 2>&1 | awk '{sort -rnk $2}'

 

 

监听端口的连接数

 

netstat -anp|grep :80|awk '{print $5}'|awk -F: '{print $1}'|awk '{a[$1]+=1;}END{for (i in a) print i,a[i];}'
 

 

二、shell脚本多行合并-------------高级用法

 

    要求:

    文件:text.txt 格式:
    web01[192.168.2.100]

    httpd            ok
    tomcat               ok
    sendmail               ok
    web02[192.168.2.101]
    httpd            ok
    postfix               ok
    web03[192.168.2.102]
    mysqld            ok
    httpd               ok

     

    需要通过awk将输出格式变成:

    web01[192.168.2.100]:   httpd            ok
    web01[192.168.2.100]:   tomcat               ok
    web01[192.168.2.100]:   sendmail               ok
    web02[192.168.2.101]:   httpd            ok
    web02[192.168.2.101]:   postfix               ok
    web03[192.168.2.102]:   mysqld            ok
    web03[192.168.2.102]:   httpd               ok

     

    分析:

    分析发现需要将包含有“web”行进行跳过,然后需要将内容与下面行合并为一行。

    [chengmo@centos5 shell]$ awk '/^web/{T=$0;next;}{print T":\t"$0;}' test.txt

    web01[192.168.2.100]:   httpd            ok
    web01[192.168.2.100]:   tomcat               ok
    web01[192.168.2.100]:   sendmail               ok
    web02[192.168.2.101]:   httpd            ok
    web02[192.168.2.101]:   postfix               ok
    web03[192.168.2.102]:   mysqld            ok
    web03[192.168.2.102]:   httpd               ok
 

$0代表整行输出

 

 

 

你可能感兴趣的:(shell,Linux)