用awk找到一行中的差异

Sha*_*aun 2 awk

我有一个表,其中给定行中的大多数值是相同的.我想要提取的是任何行,其中至少有一个值是不同的.我已经弄清楚如何用这样的东西做到这一点

awk -F "\t" '{if (($4!=$5)&&($5!=$6)&&($6!=$7)) print $0;}'
Run Code Online (Sandbox Code Playgroud)

唯一的问题是有40个奇数列要比较.是否有更优雅的方法来比较多个列的差异.顺便说一句 - 这些是非数值,所以花哨的数学技巧不会起作用.

谢谢大家.我是新手,所以我不得不承认我不理解所有命令等,但我可以从这里查看.我不确定我的建议是什么,但我从具体的例子中学到的东西比从课本解释中学到的更多,所以有了这些不同的解决方案对我的学习曲线有很大的帮助.

Chr*_*our 6

花哨的数学技巧可能不起作用,但如何:

$ cat file
one one one one two
two two two two two
three four four five

$ awk '{f=$0;gsub($1,"")}NF{print f}' file 
one one one one two
three four four five
Run Code Online (Sandbox Code Playgroud)

首先,我们将线存储在原始状态,f=$0然后我们对与第一个字段匹配的所有内容进行全局替换,如果所有字段都相同则不会留下NF任何内容将为0并且不会打印任何内容,否则我们将打印原始行.

您的脚本开始时$4建议您只对此字段中的更改感兴趣,在这种情况下:

$ awk '{f=$0;gsub($4,"")}NF>3{print f}' file 
Run Code Online (Sandbox Code Playgroud)