awk를 사용하여 앞에 숫자가 없는 문자열을 일치시키는 방법은 무엇입니까?

awk를 사용하여 앞에 숫자가 없는 문자열을 일치시키는 방법은 무엇입니까?

두 번째 열이 다음과 같은 파일이 있습니다.

37M533N38M
14M1170N45M233N16M
3S45M3N35M

다음을 포함하는 문자열을 추출하고 싶습니다.3N 하지만이전에는 다른 번호가 없었습니다 3. 예를 들어 A3N일치하지만 23N일치하지 않습니다. 또한 3N결코 단독으로 발생하지 않으며 문자열은 로 시작하지도 3N않고 로 끝나지도 않는다는 점에 유의해야 합니다 3N. 결과는 위의 세 번째 줄이어야 합니다.

3S45M3N35M

awk에서는 어떻게 할 수 있나요? 나는 그것을 시도했지만 $2 ~ /3N/확실히 작동하지 않습니다.

답변1

부정적인 문자 클래스를 사용하여 [^0-9]"숫자를 제외한 모든 문자"를 의미할 수 있습니다.

awk '$2~/[^0-9]3N/' file

3N필드의 시작 부분에 있는 경우도 일치시켜 그 앞에 문자가 없도록 하려면 다음 을 사용하십시오.

awk '$2~/(^|[^0-9])3N/' file

전체 줄이 아닌 두 번째 필드만 인쇄하려면 다음을 사용하세요.

awk '$2~/[^0-9]3N/{print $2}' file

또는

awk '$2~/(^|[^0-9])3N/{print $2}' file

답변2

grep을 사용하세요:

grep [^0-9][3][N] file

V- 일치하지 않는 항목/역일치 항목 표시

[0-9][3][N]- 양의 정수 3N이 앞에 오는 패턴을 찾습니다.

답변3

다음 명령을 사용하여 테스트하면 위의 예에서는 제대로 작동합니다.

awk '$2 ~ /[A-Za-z]3N/{print $0}' filename

관련 정보