微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash – 检查A列和B列是否与AWK双向同步的最简单方法是什么?

检查A列和B列值是否双向的最简单方法是什么?

要检查的输出

Mike John
John Mike
Pamela Barbara
Barbara Pamela
Mike Paul
Roger Paul

期望的输出

Mike <-> John
Pamela <-> Barbara
Mike -> Paul
Roger -> Paul

PS.

首先,它可能像在A和B列中查找所有可能的值,然后为每一行执行wordcount

Mike John 1 1
Pamela Barbara 1 1
Mike Paul 1 0 
Roger Paul 1 0

然后将更改输出到所需的值.

解决方法:

如果订单不是问题,您可以在awk中使用此哈希解决方案.

BEGIN { d = "|" }
{
  if(names[$2 d $1] > 0)
    ++names[$2 d $1]
  else
    ++names[$1 d $2]
}

END { 
  for(n in names) { 
    split(n, a, d)
    if(names[n] >= 2)
      print a[1] " <-> " a[2]

    if(names[n] == 1)
      print a[1] " -> " a[2]
  }
}

哈希值被初始化为由管道(d变量)分隔的两个名称的串联;如果这些名称以相反的顺序再次出现,则哈希中的特定元素将增加到2.

输出

Pamela <-> Barbara
Mike -> Paul
Roger -> Paul
Mike <-> John

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐