내 패턴에 해당하는 다른 단어가 포함된 파일이 있습니다.
텍스트.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