50000줄이 넘는 기본 파일이 있고 실제 파일에서 약 20000줄을 삭제해야 하는데 이 경우 grep -vE
매개변수가 너무 많기 때문에 내가 사용하는 명령에 오류가 표시됩니다.
sed
for 루프를 사용하여 삭제하는 명령을 사용하고 있습니다 . 그런데 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)