다음과 같은 2개의 열이 있는 파일이 있습니다.
apple pear
banana pizza
spoon fork
pizza plate
sausage egg
단어가 여러 줄에 나타나면 중복된 단어가 나타나는 모든 줄을 삭제하고 싶습니다. 보시다시피 "pizza"가 두 번 나타나므로 2줄을 삭제해야 합니다. 아래는 원하는 출력입니다.
apple pear
spoon fork
sausage egg
나는 다음을 사용하는 방법을 알고 있습니다:
awk '!seen[$1]++'
그러나 문자열이 한 열에 나타나는 경우에만 행이 제거되므로 두 열을 모두 확인하는 명령이 필요합니다. 어떻게 해야 하나요?
답변1
기본적인 2단계 접근 방식은 고유하지 않은 단어 목록을 만들고 이를 grep -v
.
sort
첫 번째 부분에서는 and uniq -d
(단어를 직렬화한 후 - 아마도 with tr
) 또는 - 계속 사용하려면 awk
다음과 같이 사용할 수 있습니다 .
awk -vRS='[ \t\n]' 'seen[$0]++' file
분할기록여백에 넣고 인쇄하세요가지다전에 본 적이 있어요. 그래서
$ awk -vRS='[ \t\n]' 'seen[$0]++' file | grep -Fvf- file
apple pear
spoon fork
sausage egg
답변2
다음 명령을 사용해보십시오
for i in `cat filename| perl -pne "s/ /\n/g"| sort| uniq`; do j=`grep -c $i p.txt`; if [[ $j -eq 2 ]]; then sr=`echo $i`; else sed -n '/'$i'/p' p.txt| sed -n '/'$sr'/!p'; fi; done| awk '{if (!seen[$0]++)print $0}'
산출
apple pear
sausage egg
spoon fork