比较每行的多个列

Compare multiple columns for each row

使用 csv 文件,我想比较多个列以检查所有值是否相同。

第一行是 headers 第一列是标签 常数值应该是从第 2 列到末尾(可以是 100 列),例如我只放了 8 列。

目的是检查所有值是否相同。如果不是,报告

输入文件

Number,V2 1563,V03-1555,V4 - 294,V-05 1580,V6-1561,V7-1562,V05-1601,V9-1587
Code,4.1.06,4.1.03,4.1.06,4.1.06,4.1.06,4.1.06,4.1.06,4.1.06
Host Id,b90c27,b90c13,3.30E+65,b90c46,b90c21,b90c1f,b88a63,b90c49
SR,SR_2_MS,SR_2_MS,SR_4_MS,SR_2_MS,SR_2_MS,SR_2_MS,SR_2_MS,SR_2_MS

需要输出

Bad code in V03-1555
Bad SR in V4 - 294

感谢您的支持

awk 救援!

我即兴创作了一点。我们如何知道哪些值是正确的,哪些不是?大众投票,计算出现次数并假设多数是正确的。附带的好处是,如果所有值都与 "Host Id" 行中的值不同,则不会报告任何内容

$ awk -F, 'NR==1 {split([=10=],h); next} 
                 {delete r; 
                  for(i=2;i<=NF;i++) {r[$i]++; idx[$i]=i}
                  max=0;
                  for(k in r) if(max<r[k]) max=r[k];
                  if(length(r)>1) 
                    for(k in r) 
                      if(r[k]!=max) 
                        print "Bad "  " in " h[idx[k]] " -> " k}' file

returns

Bad Code in V03-1555 -> 4.1.03
Bad SR in V4 - 294 -> SR_4_MS

你可以把打印出来的值去掉,我放上去验证的。