行和行之间的文件比较

时间:2014-03-13 09:39:51

标签: bash awk

我有3个文件,file1是一个文本文件,file2是一个csv文件而file3是一个html文件,我需要一个bash脚本来执行以下操作:

  1. file1的第一行与file2的第二列(配置)进行比较,如果相等,请将行的内容复制到file3中的现有空表

  2. 如果不相等,请转到第二列(config)file2的第二行,如果相等,则将行的内容复制到file3

  3. file1 :(样本)

    interface fa0/0
    interface loopback 0
    ip address 10.1.1.1 255.255.255.0
    no shutdown
    router OSPF 1
    

    file2 :(样本)

    ,, Network LAB - Final config - sample -  table 1.1 - CSV - final config table,,,,,,,,
    ,,,,,,,,,,
    ,ID,Config,Config description,Config      score,Hostname,Mode,Category,Subcategory,Interface,IP/Network Address (if applicable
    ,1,interface F0/0,Go to interface F0/0 configuration mode from global configuration mode,0%,R1,Global,Basic config,Int F0/0,F0/0,-
    ,2,ip address 10.1.1.1 255.255.255.0,Set IP address on interface F0/0,8%,R1,Int F0/0,Basic config,Int F0/0 - IP Address,F0/0,10.1.1.1 255.255.255.0
    ,3,no shutdown,Brings interface F0/0 UP,7%,R1,Int F0/0,Basic config,Int F0/0 - Brings UP,F0/0,-
    

    file3 :(这是html文件的表格部分)

    <tr class="gwd-tr-rtto">
    <td data-sheets-value="[null,2,&quot;Config&quot;]" class="gwd- td-gn3d">Config</td>
    <td data-sheets-value="[null,2,&quot;Config description&quot;]" class="gwd-td-qwup">Config description</td>
    <td data-sheets-value="[null,2,&quot;Config score&quot;]" class="gwd-td-d4iw">Config score</td>
    <td data-sheets-value="[null,2,&quot;Hostname&quot;]" class="gwd-td-djzd">Hostname</td>
    <td data-sheets-value="[null,2,&quot;Mode&quot;]" class="gwd-td-17wt">Mode</td>
    <td data-sheets-value="[null,2,&quot;Category&quot;]" class="gwd-td-24v5">Category</td>
    

    这是我到目前为止所拥有的,因为我没有编码它可能很乱的经验,我可能完全弄错了,需要改变所有这些,感谢你的帮助。

    awk   FS=\, OFS=\, '
    BEGIN{t="Time , Network LAB"}
    FNR==1  {next}
    NR==FNR {a[$1];next}
    { 
        if ($1 in a)
           {$1="*"$1;t=t RS $0}
        else
           {s=s==""?$0:s RS $0}
    }
    END {print t RS s}'file2 file1
    awk '{print $0 >> "file3" }
    

1 个答案:

答案 0 :(得分:1)

您可以尝试:

awk 'NR==FNR {
    a[$0]++
    next
  }
  FNR>1{
    if ($3 in a)
        print $3
  }' file1 FS=, file2

输出:

ip address 10.1.1.1 255.255.255.0