如何比较同一文件中一行的列?

如何比较同一文件中一行的列?

这是我的输入文件:

A B B A  
A A A   
B A B A  
B B  
A A  
A B

如果所有列都相同,我只想打印第一列。
否则,我想打印multi

期望的输出:

multi  
A  
multi  
B  
A  
multi

谁能帮我? (我更喜欢awksed。)

答案1

使用 AWK:

awk '{ for (i = 2; i <= NF; i++) { if ($i != $1) { print "multi"; next } }; print $1 }'

每行的处理如下:

  • 从第二个字段开始,将每个字段与第一个字段进行比较;
  • 如果发现差异,则打印“multi”并移至下一行;
  • 如果没有发现差异(循环结束,或完全跳过,例如对于不包含字段或仅包含一个字段的行),打印第一个字段(并移至下一行)。

答案2

awk/perl是完成这项工作的更好工具,但你也可以使用sed

sed -E 's/^([^[:blank:]]*)([[:blank:]]+\1)*$/\1/;t;s/.*/multi/' infile

答案3

$ awk '{b=$1; gsub($1,""); if (/^\s*$/) {print b} else {print "multi"}}' file         
multi
A
multi
B
A
multi

相关内容