如何将命令删除awk脚本中的重复行?

时间:2019-08-07 09:39:12

标签: csv awk cgi

我在bash / html中创建一个CGI。

我的awk脚本如下:

echo "<p><h2>FRAME : $test</h2></p>"

echo "<table>"
for fn in /var/www/cgi-bin/LPAR_MAP/*;
do
echo "<td>"
echo "<PRE>"

awk -F',|;' -v test="$test" '
     NR==1 { 
        split(FILENAME ,a,"[-.]");
      }
      $0 ~ test {
          if(!header++){
              print "DATE ========================== : " a[4] 
          }
          print ""
          print "LPARS :" $2
          print "RAM : " $5
          print "CPU 1 : " $6
          print "CPU 2 : " $7
          print "" 
          print ""
      }' $fn;



echo "</PRE>"
echo "</td>"
done
echo "</table>"

此脚本允许分析276个csv文件,如下所示:

MO2PPC20;mo2vio20b;Running;VIOS 2.2.5.20;7;1.0;2;DefaultPool;shared;uncap;192
MO2PPC20;mo2vio20a;Running;VIOS 2.2.5.20;7;1.0;2;DefaultPool;shared;uncap;192
MO2PPC21;mplaix0311;Running;AIX 7.1 7100-05-02-1832;35;0.6;4;DefaultPool;shared;uncap;64
MO2PPC21;miaibv194;Running;AIX 6.1 6100-09-11-1810;11;0.2;1;DefaultPool;shared;uncap;64
MO2PPC21;mplaix0032;Running;AIX 6.1 6100-09-11-1810;105;4.0;11;DefaultPool;shared;uncap;128
MO2PPC21;mplaix0190;Running;Unknown;243;4.9;30;DefaultPool;shared;uncap;128
MO2PPC21;mo2vio21b;Running;VIOS 2.2.6.10;6;1.5;3;DefaultPool;shared;uncap;192
MO2PPC21;miaibv238;Running;AIX 7.1 7100-05-02-1810;10;0.5;1;DefaultPool;shared;uncap;64
MO2PPC21;mo2vio21a;Running;VIOS 2.2.6.10;6;1.5;3;DefaultPool;shared;uncap;192
MO2PPC21;miaibv193;Running;AIX 6.1 6100-09-11-1810;12;0.2;1;DefaultPool;shared;uncap;64
MO1PPC17;miaibe03;Running;AIX 5.2 5200-10-08-0930;25;null;3;null;ded;share_idle_procs;null
MO1PPC17;miaiba12;Running;AIX 5.2 5200-10-08-0930;17;null;2;null;ded;share_idle_procs;null
MO1PPC17;miaibf03;Running;AIX 5.2 5200-10-08-0930;30;null;3;null;ded;share_idle_procs;null
MO1PPC17;miaibc05;Running;AIX 5.2 5200-10-08-0930;40;null;2;null;ded;share_idle_procs;null

并以如下方式在我的CGI中显示它们: enter image description here

列数等于要分析的csv数。

如屏幕截图所示,每个csv文件中的某些行有时是相同的

这个想法是删除所有csv文件中相同的行。

我知道awk命令:

awk '!a[$0]++'

但是此命令需要一个文件。

您认为可以在我的awk脚本中添加此命令吗?

1 个答案:

答案 0 :(得分:1)

使用awk一次读取所有文件并添加条件:

awk -F',|;' -v test="$test" '
 BEGIN{
    print "<table>"
 }
 FNR==1 {
    if(close_tag++){
            print "</PRE>"
            print "<td>"
    }
    print "<td>"
    print "<PRE>"
    split(FILENAME ,a,"[-.]");
  }
  ($0 ~ test) && (!dup[$0]++) {
      if(!header++){
          print "DATE ========================== : " a[4] 
      }
      print ""
      print "LPARS :" $2
      print "RAM : " $5
      print "CPU 1 : " $6
      print "CPU 2 : " $7
      print "" 
      print ""
  }
  END{
      print "</PRE>"
      print "</td>"
      print "</table>"
  }' /var/www/cgi-bin/LPAR_MAP/*