파일에서 단어와 일치하는 줄 삭제

파일에서 단어와 일치하는 줄 삭제

내 패턴에 해당하는 다른 단어가 포함된 파일이 있습니다.

텍스트.TXT

842
897
907
967
995
1065
1095

word.txt 일치 시 삭제하고 싶은 줄이 포함된 기타 파일

816.42743   9246.4688
832.41711   8867.3076
842.51001   23988.459
859.42639   5776.8726
870.53418   5992.9668
875.41742   6930.3584 
877.43384   35639.199 
885.51709   60137.957
891.41595   5480.983

따라서 새 패딩은 패턴의 단어와 일치하는 3행을 삭제해야 합니다 842.

최종 파일은 다음과 같아야 합니다.

816.42743   9246.4688
832.41711   8867.3076
859.42639   5776.8726
870.53418   5992.9668
875.41742   6930.3584 
877.43384   35639.199 
885.51709   60137.957
891.41595   5480.983

점 앞의 숫자만 인식하려면 단어의 패턴(word.txt)도 필요합니다. 감사합니다. 명확하게 설명할 수 있었으면 좋겠습니다.

답변1

방법을 사용하다GNU awk 매뉴얼에 들어가는 것이 좋습니다파일 분석:

awk -F '.' 'pass == 1 {seen[$0]}
            pass == 2 && !($1 in seen)' pass=1 words.txt pass=2 file

처음에는 각 행( $0)을 words.txt연관 배열의 키로 저장합니다 seen.

두 번째 패스에서는 file첫 번째 필드( $1)가 존재하지 않는 행만 인쇄합니다 seen.

-F '.'필드 구분 기호( FS)를 리터럴 포인트로 설정합니다.

산출:

816.42743   9246.4688
832.41711   8867.3076
859.42639   5776.8726
870.53418   5992.9668
875.41742   6930.3584 
877.43384   35639.199 
885.51709   60137.957
891.41595   5480.983

답변2

awk -F'.' 'NR==FNR{a[$1]; next} !($1 in a)' words.txt file2

답변3

grep을 사용할 수 있지만 "앞에 점" 요구 사항을 적용하려면 다른 도구가 필요합니다.

grep -v -w -f <(sed 's/^/^/' words.txt) file2
  • grep은 패턴이 포함된 파일을 가져올 수 있습니다.-f
  • 하지만 우리는 숫자 파일을 정규식으로 변환하고 싶으므로 프로세스를 sed로 바꾸십시오.
  • 전체 단어를 일치시키고 싶습니다.-w
  • 그리고 당신은 일치를 취소하고 싶습니다 :-v

관련 정보