AWKを使用して列Aと列Bの値が双方向であることを確認する最も簡単な方法は何ですか? [閉鎖]

AWKを使用して列Aと列Bの値が双方向であることを確認する最も簡単な方法は何ですか? [閉鎖]

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のすべての可能な値を調べて、各行の単語数を計算するのと同じです。

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

その後、変更内容を希望の変更内容に出力します。

ベストアンサー1

順序が問題にならない場合は、このハッシュソリューションを使用できます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つの名前の接続で初期化されます。これらの名前が逆の順序で再現されると、ハッシュの特定の要素が2に増加します。

出力:

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

おすすめ記事