AWK: 특정 패턴이 포함되지 않은 특정 줄을 삭제하는 방법은 무엇입니까?

AWK: 특정 패턴이 포함되지 않은 특정 줄을 삭제하는 방법은 무엇입니까?

공백-대시-공백으로 구분된 다양한 영숫자 문자열이 포함된 파일이 있습니다. 그러나 영숫자 값과 구분 기호만 있고 다른 문자열 값이 누락된 일부 행이 있습니다. 예:

MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613
DK0060056323-DKK -
DK0060186294-DKK -

위 예의 마지막 두 줄에는 구분 기호 오른쪽에 영숫자 문자열이 누락되어 있으며 이를 제거하고 싶습니다. 다음 awk 표현식을 사용해 보았습니다.

awk '!/* - /' sourcefile.txt > temp.txt && mv temp.txt sourcefile.txt

!/* - /말은 "문자(*) 뒤에 공백-대시 공백(-)이 있고 그 뒤에는 아무 것도 없는 패턴을 찾는 것입니다. 그러한 패턴이 발견되지 않으면(!)" 그런 다음 나머지 줄을 임시로 이동합니다. . txt 파일을 만들고 sourcefile.txt 콘텐츠를 temp.txt 콘텐츠로 바꿉니다. 그러나 위의 awk 스크립트를 실행하면 sourcefile.txt 내용에는 아무 일도 일어나지 않습니다. 모든 것이 동일하게 유지됩니다. 나도 오류가 발생하지 않습니다. 여기서 무엇이 잘못될 수 있나요? 위의 예제 줄이 주어지면 awk 스크립트를 실행한 후 원하는 출력은 다음과 같아야 합니다.

MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613

답변1

영숫자 문자로 끝나는 줄을 인쇄하는 방법은 간단합니다.

$ awk '/[[:alnum:]]$/' file
MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613

답변2

더 간단하다:

awk '$3' inputfile

이것은 의 약어입니다 awk '$3!=""', 이것은 의 약어입니다, 이것은 의 약어입니다 awk '$3!=""{print}', 이것은 의 약어입니다awk '$3!=""{print $0}'

참고로:

sed /-$/d아마도 더 빠르고, grep -ve '-$'더 빠를 것입니다.

답변3

@guillermo chamorro의 제안 덕분에 원하는 결과를 얻기 위해 다음과 같은 방법으로 스크립트를 수정할 수 있었습니다.

awk '!/^.* -$/' sourcefile.txt > temp.txt && mv temp.txt sourcefile.txt

길예르모에게 감사드립니다.

관련 정보