使用csv文件,我想比较多列以检查所有值是否相同。
第一行是标题 第一列是标签 对于我只放置8列的示例,常量值应该是从第2列到结尾(可以是100列)。
目的是检查所有值是否相同。如果不是,请报告
输入文件
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
感谢您的支持
答案 0 :(得分:1)
awk
救援!
我即兴创作了一点。我们怎么知道哪些值是正确的,哪些不是?流行投票,计算事件并假定多数是正确的。作为附带好处,如果所有值都与“主机ID”行中的不同,则不会报告任何内容
$ awk -F, 'NR==1 {split($0,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 " $1 " in " h[idx[k]] " -> " k}' file
返回
Bad Code in V03-1555 -> 4.1.03
Bad SR in V4 - 294 -> SR_4_MS
您可以删除我打算验证的值。