bash는 두 파일의 공통 줄을 삭제합니다.

bash는 두 파일의 공통 줄을 삭제합니다.

두 개의 파일이 있습니다(빈 줄/공백/탭 없음).

/tmp/모두

aa  
bb  
cc  
hello  
SearchText.json  
xyz.txt  

/tmp/필수

SearchText.json 

내가 원하는 최종 출력은 다음과 같습니다. (/tmp/all의 모든 흔하지 않은 줄)

aa  
bb  
cc  
hello  
xyz.txt 

나는 다음 명령을 시도했습니다 :-

# comm -23 /tmp/required /tmp/all

SearchText.json

# comm -23 /tmp/all /tmp/required

aa  
bb  
cc
hello  
SearchText.json  
xyz.txt  

# comm -13 /tmp/all /tmp/required

SearchText.json  

# comm -13 /tmp/required /tmp/all

aa  
bb  
cc  
hello  
SearchText.json  
xyz.txt  

# grep -vf /tmp/all /tmp/required

# grep -vf /tmp/required /tmp/all

aa  
bb  
cc  
hello  
SearchText.json  
xyz.txt  

# comm -23 <(sort /tmp/all) <(sort /tmp/required)

aa  
bb  
cc  
hello  
SearchText.json  
xyz.txt  

답변1

대안으로 다음을 comm고려하십시오.grep:

grep -vxFf /tmp/required /tmp/all

이를 위해서는 () 줄이 () 파일에 존재하지 않아야 합니다 /tmp/all. 어떤 줄도 정규식으로 해석되지 않도록 "고정 문자열" 플래그를 추가했습니다. 또한 전체 입력 줄이 의 줄과 일치하도록 강제하기 위해 해당 옵션을 사용합니다.-v-f/tmp/required/tmp/all-F/tmp/all/tmp/required-x

이 방법에는 정렬된 입력이 필요하지 않습니다.

comm -23 <(sort ...) <(sort ...)"SearchText.json" 줄이 일치하면 명령이 작동할 것 같지 않습니다.정확히두 파일 모두에 포함됩니다(후행 공백이 있는 경우 동일한 수).

관련 정보