使用awk比较shell中的2个csv文件

时间:2017-03-12 12:20:56

标签: shell csv awk

感谢。

我有2个csv文件,我需要比较它们并报告它是否有所不同。两个文件中的文件格式相同,甚至两个文件中的第一列数据(列A)都具有相同的内容(它的标题信息)。

尝试使用awk命令,但是有条件不确定如何实现。

条件:

一个。需要排除前两行(因为比较不需要这些行)。这可以通过以下方式实现:

b

湾如果任何值不同,那么在输出中需要使用标题信息及其相应的服务器名以及值进行报告。

File1.csv:

NFR=NR > 2

File2.csv:

Status Check
APP servers
Server name,abc,def,ghi,jkl,mno,
Summary,,,,,,
System Start Time,Nov/12/2016 20:12:24 GMT,Nov/12/2016 20:15:38 GMT,Nov/12/2016 20:15:37 GMT,Nov/12/2016 20:15:57 GMT,Nov/12/2016 20:11:42 GMT,
System Life Time,118day.14hr.15min.19sec,118day.14hr.12min.01sec,118day.14hr.12min.03sec,118day.14hr.11min.44sec,118day.14hr.16min.01sec,
OS Version,SunOS 5.10,SunOS 5.10,SunOS 5.10,SunOS 5.10,SunOS 5.10,
Service Pack Version,Generic_147148-26,Generic_147148-26,Generic_147148-26,Generic_147148-26,Generic_147148-26,
State,Up,Up,Up,Up,Up,

结果/输出:

Status Check
APP servers
Server name,abc,def,ghi,jkl,mno,
Summary,,,,,,
System Start Time,Nov/13/2016 20:12:24 GMT,Nov/13/2016 20:15:38 GMT,Nov/13/2016 20:15:37 GMT,Nov/13/2016 20:15:57 GMT,Nov/13/2016 20:11:42 GMT,
System Life Time,118day.14hr.15min.19sec,118day.14hr.12min.01sec,118day.14hr.12min.03sec,118day.14hr.11min.44sec,118day.14hr.16min.01sec,
OS Version,SunOS 5.10,SunOS 5.10,SunOS 5.11,SunOS 5.12,SunOS 5.10,
Service Pack Version,Generic_147148-26,Generic_147148-26,Generic_147148-26,Generic_147148-26,Generic_147148-26,
State,Down,Up,Down,Up,Down,

是否可以排除5/6列进行比较,因为这将与日期/时间相关,因此不需要进行比较。

只能给出键值(比如列b / c)只有那些特定的列数据才能与b / w文件进行比较?

1 个答案:

答案 0 :(得分:2)

这可能会让您了解如何解决问题

$ paste -d, file{1,2} | 
  awk -F,     'NR<3  {next}
               NR==3 {n=split($0,h); m=n/2} 
      NR!=5 && NR!=6 {for(i=2;i<=m-1;i++) 
                        if($i!=$(i+m)) print $1,h[i],$i,$(i+m)}'


OS Version ghi SunOS 5.10 SunOS 5.11
OS Version jkl SunOS 5.10 SunOS 5.12
State abc Up Down
State ghi Up Down
State mno Up Down

可以添加输出格式,但会使代码复杂化。由于您的值包含空格,因此您可能希望将逗号保留为输出字段分隔符。