내 파일은 다음과 같습니다.
alice, bob
bob, cat
cat, dennis
cat, bob
dennis, alice
같은 단어를 역순으로 반복하는 줄을 제거하고 싶습니다. 이 예에서는 bob, cat
및 cat, 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