打印第一列匹配的行,第二列不同

时间:2014-09-03 22:17:13

标签: bash awk sed grep

在文本文件中,如何仅打印第一列重复但第二列不同的行?我想调和这些差异。可能使用awk / sed / bash?

输入:

Jon    AAA
Jon    BBB
Ellen  CCC
Ellen  CCC

输出:

Jon  AAA
Jon  BBB

注意,实际文件未排序。

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

这一行应该做到:(为了更好的阅读,我将单行划分为3行)

awk '!($1 in a) {a[$1]=$2;next}
     $1 in a && $2!=a[$1]{p[$1 FS $2];p[$1 FS a[$1]]}
     END{for(x in p)print x}' file
  • 第一行将$ 1 $ 2保存到数组中,如果第一次检查
  • 第2行:对于现有的$ 1和不同的$ 2,将它们(两行)放入数组p中,这样同样的$ 1,$ 2组合将不会多次打印。
  • 打印数组p
  • 的索引

答案 1 :(得分:1)

sort file | uniq -u

仅打印独特的线条。

答案 2 :(得分:1)

这可能对您有用:

sort file | uniq -u | rev | uniq -Df1 | rev

这会对文件进行排序,删除任何重复的行,反转行,删除不具有相同键的唯一行(保留第二个字段相同的重复行)并将行反转到其原始位置。

这将删除带有单键的重复行和行。

答案 3 :(得分:0)

正常的唯一排序应该有效

awk '!a[$0]++' test