전체 목록과 부분 목록이라는 두 개의 목록이 있습니다. 섹션의 모든 행에 대한 전체 목록을 검색하고 있는 경우 전체 목록에서 제거되는 bash 스크립트를 원합니다. 누구든지 도와줄 수 있나요?
답변1
grep
파일에서 한 줄에 하나씩 여러 패턴을 읽을 수 있습니다. 일치하지 않는 줄을 출력하고 정규식 대신 문자열을 일치시키며 전체 줄이 일치하도록 요구하는 -v
옵션 과 함께 사용됩니다.-F
-x
grep -Fvx -f partial.list complete.list >remaining.list &&
mv remaining.list complete.list
분명히 두 번째 명령줄은 전체 목록이 포함된 파일을 덮어쓰는 경우에만 작동합니다.
부분 목록이 크고 목록을 다시 정렬해도 괜찮다면join
아마도 더 빠를 것입니다.
답변2
당신은 또한 사용할 수 있습니다 -
comm -23 file1 file2
명령이 제대로 작동하려면 파일을 정렬해야 합니다. 명령 출력에서 file2의 항목은 file1에서 제거됩니다.
답변3
두 목록에 중복된 요소가 없으면 다음이 작동합니다.
join -t$'\n' -v1 <(sort complete) <(sort partial)
목록에 중복된 요소가 포함될 수 있고 중복된 요소를 무시하려는 경우 -u
sort 하위 명령에 이 플래그를 사용하면 고유한 요소만 출력됩니다.