문자열이 여러 줄에 나타날 때 파일에서 줄을 제거하는 방법은 무엇입니까?

문자열이 여러 줄에 나타날 때 파일에서 줄을 제거하는 방법은 무엇입니까?

다음과 같은 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

관련 정보