这是我的输入文件:
A B B A
A A A
B A B A
B B
A A
A B
如果所有列都相同,我只想打印第一列。
否则,我想打印multi
。
期望的输出:
multi
A
multi
B
A
multi
谁能帮我? (我更喜欢awk
或sed
。)
答案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