파일에서 다른 순서로 중복된 줄을 제거합니다.

파일에서 다른 순서로 중복된 줄을 제거합니다.

내 파일은 다음과 같습니다.

alice, bob
bob, cat
cat, dennis
cat, bob
dennis, alice

같은 단어를 역순으로 반복하는 줄을 제거하고 싶습니다. 이 예에서는 bob, catcat, bob가 반복되므로 cat bob을 제거하고 출력은 다음과 같아야 합니다.

alice, bob
bob, cat
cat, dennis
dennis, alice

어떻게 해야 하나요?

답변1

정렬된 요소로 입력된 해시를 사용할 수 있습니다.

$ perl -lne 'print unless $h{join ",", sort split /, /, $_}++' file
alice, bob
bob, cat
cat, dennis
dennis, alice

정확히 2개의 필드에 대해서는 이와 같은 것으로 충분할 수 있습니다.

$ awk -F', ' '!seen[$2 FS $1]; {seen[$0]++}' file
alice, bob
bob, cat
cat, dennis
dennis, alice

답변2

awk에 대한 관용적 답변은 다음과 같습니다.

$ awk -F', ' '!seen[$1>$2 ? $1 FS $2 : $2 FS $1]++' file
alice, bob
bob, cat
cat, dennis
dennis, alice

필드 수에 관계없이 일반적인 접근 방식은 필드를 정렬하고 정렬된 목록을 saw[]에 대한 인덱스로 사용하는 것입니다.

답변3

그러면 각 행이 필드별로 정렬된 다음 파일이 정렬되고 고유한 행만 선택됩니다.

while read line
  do
    echo $line |
    tr ' ,' '\n' |
    sort |
    tr '\n' ','
done < 1 |
sed -e 's/^,//' -e 's/,$//' -e 's/,,/\n/g' |
sort -u

관련 정보