동일한 정보를 포함하지만 순서가 다른 행을 삭제합니다.

동일한 정보를 포함하지만 순서가 다른 행을 삭제합니다.

(txt 파일에) 두 줄이 있다고 가정해 보겠습니다.

Monday, Tuesday, Week
Tuesday, Monday, Week

여기에는 동일한 정보가 포함되어 있지만 정보(첫 번째 열과 두 번째 열)가 각 행에서 다른 순서로 되어 있으므로 간단히 사용하거나 제거할 수는 sort없습니다 uniq.

동일한 정보가 포함된 중복 행을 모두 제거하려면 어떻게 해야 합니까?

답변1

그리고 perl:

perl -lne 'print unless $seen{join ",", sort split /,\h*/}++'

답변2

파일에 표시되는 줄의 순서를 유지하는 데 신경 쓰지 않는다면 각 줄을 표준(또는 정식) 형식으로 지정한 다음 sort/uniq 또는 이와 유사한 방법을 사용할 수 있습니다.

파일에 표시된 순서 중 하나를 보존하는 데 관심이 있다고 추가했기 때문에 내가 취한 접근 방식은 각 줄을 정식 순서로 정렬하고 원래 줄과 함께 출력한 다음 다음과 같이 표시된 첫 번째 정규화된 줄을 정렬하는 것이었습니다. 키 및 중복 키가 있는 행이 제거된 다음 키가 잘립니다.

이것이 첫 번째 부분입니다. 각 원본 줄 앞에는 줄 내용의 정규화된 표현이 추가됩니다.

( while read f; do  echo $f | tr -d "," | tr " " "\n" | sort | tr "\n" " " ; echo ':' $f ; done  < data ) | awk -F":" '!_[$1]++' | cut -f2 -d: |cut -c2-

그 일부를 실행하여 그것이 무엇을 하는지 볼 수 있습니다. 첫 번째 부분은 : 구분 기호를 사용하여 정식 표현(어휘순으로 정렬)을 사용하여 원시 레코드를 내보냅니다.

 $ cat data
Monday, Tuesday, Week
Tuesday, Monday, Week
Tuesday, Thursday, Week
Week, Thursday, Tuesday

 $ ( while read f; do  echo $f | tr -d "," | tr " " "\n" | sort | tr "\n" " " ; echo ':' $f ; done  < data )
Monday Tuesday Week : Monday, Tuesday, Week
Monday Tuesday Week : Tuesday, Monday, Week
Thursday Tuesday Week : Tuesday, Thursday, Week
Thursday Tuesday Week : Week, Thursday, Tuesday

그런 다음 awk를 사용하여 키가 표시될 때마다 횟수를 포함하는 해시를 구축하고 "!"가 포함되지 않으므로 각 키의 첫 번째 인스턴스에 암시적 인쇄가 포함됩니다.

 $ ( while read f; do  echo $f | tr -d "," | tr " " "\n" | sort | tr "\n" " " ; echo ':' $f ; done  < data ) | awk -F":" '!_[$1]++' | cut -f2 -d: |cut -c2-
Monday, Tuesday, Week
Tuesday, Thursday, Week

답변3

까다로운 솔루션(이것은 단지 예일 뿐임) - 내 bash에서 잘 작동합니다. 모든 줄/단어를 문자별로 분할한 다음 해당 문자를 정렬할 수 있습니다. 1행 정렬 = 2행 정렬이면 중복 항목이 있는 것입니다.

word1+=( $(echo "this is my life" |fold -w1) )
sortedword1=($(echo ${word1[@]} | tr " " "\n" | sort))
word2+=( $(echo "is this my life" |fold -w1) )
sortedword2=($(echo ${word1[@]} | tr " " "\n" | sort))
echo "${sortedword1[@]}"
echo "${sortedword2[@]}"

if [[ $sortedword1 == $sortedword2 ]]; then
echo "Word 1 and Word 2 are the same, delete one of them"
fi

산출:

e f h i i i l m s s t y
e f h i i i l m s s t y
Word 1 and Word 2 are the same, delete one of them

관련 정보