sed는 여러 단어를 검색하고 해당 줄을 삭제합니다.

sed는 여러 단어를 검색하고 해당 줄을 삭제합니다.

50000줄이 넘는 기본 파일이 있고 실제 파일에서 약 20000줄을 삭제해야 하는데 이 경우 grep -vE매개변수가 너무 많기 때문에 내가 사용하는 명령에 오류가 표시됩니다.

sedfor 루프를 사용하여 삭제하는 명령을 사용하고 있습니다 . 그런데 sed초기화할 명령어가 20000개나 있어서 삭제하는데 시간이 오래 걸립니다 .

for i in `cat 20000-words.txt`; do 
    sed -i -e "/$i/ d" 50000-lines.txt
done

답변1

20000-words.txt가 이미 한 줄에 한 단어 형식으로 되어 있다고 가정하고 다음을 수행합니다.

grep -vFf 20000-words.txt 50000-lines.txt >50000-filtered-lines.txt

grep의 인수는 -f명령줄 인수로 전달하는 대신 파일에서 패턴을 한 줄에 하나씩 읽도록 지시합니다. grep의 인수는 -F패턴이 정규 표현식이 아닌 리터럴 문자열로 사용되어야 함을 나타냅니다.

답변2

이를 수행 grep하고 중복 행이 없다고 가정하면 다음을 수행할 수 있습니다.

$ sort 20000-words.txt 50000-lines.txt | uniq -u

또는:

$ comm -23 <(sort 50000-lines.txt) <(sort 20000-words.txt)

관련 정보