使用awk生成报告

时间:2017-07-17 01:24:38

标签: linux awk sed

我在100台服务器上有/ etc / fstab条目,我正在尝试编写一个awk脚本来识别以下内容。

sup01p.abc.com.au | SUCCESS | rc=0 >>

10.15.23.25:/tools /data/store        nfs     defaults,nodev  0       0
10.15.23.25:/kdump01 /data/kdump     nfs     defaults,nodev  0       0
10.15.23.25:/ops        /data/ops  nfs     defaults,nodev  0       0

我需要的是,首先我的awk脚本需要打印域名,然后它应该打印

10.15.23.25:/tools  /data/store - this is an invalid entry, 

工具在商店中未正确安装且无效,但正确安装了kdump01 在kdump上,ops正确安装在ops上)

如何使用awk或sed打印这样的报告? (仅打印无效的nfs挂载)

输出应该是这样的

sup01p.abc.com.au 
10.15.23.25:/tools /data/store

我设法添加了以下脚本,它列出了servername和挂载点

cat check |  awk '$1~/com.au/{ print $1 ;next} /10.15.23.25/{print $1;}/data/{print $2;print "======"}'

sup01p.abc.com.au
10.15.23.25:/tools
/data/store
======
10.15.23.25:/kdump01
/data/kdump
=====
10.15.23.25:/ops
/data/ops
======

2 个答案:

答案 0 :(得分:1)

awk 解决方案(针对您当前的输入):

cat check | awk 'NR==1{ print $1; next }{ m=substr($1,index($1,"/")+1); 
            sub(/[^a-z]+/,"",m); if($2!~m) print $1,$2 }' 

输出:

sup01p.abc.com.au
10.15.23.25:/tools /data/store

答案 1 :(得分:0)

尝试以下:

awk 'NR==1{print $1;next} {split($1, a,"/");split($2, b,"/");if(a[2] !~ b[3]){print $1,$2}}'   Input_file

EDIT1: 此处也添加了非单一形式的解决方案。

awk 'NR==1{
                print $1;
                next
          }
          {
                split($1, a,"/");
                split($2, b,"/");
                if(a[2] !~ b[3]){
                                        print $1,$2
                                }
          }
    '    Input_file