awk 조건부가 작동하지 않습니다

awk 조건부가 작동하지 않습니다

다음 명령이 있지만 아무것도 출력되지 않습니다. print $0또는 임의의 열(예: print $2, )을 유지하면 print $3예상대로 인쇄됩니다. "if 문"을 읽지 않는 것 같습니다.

awk -F"," '{if ($2 >= 09170000000 && $2 <= 09179999999) print $0 }' filename

샘플 파일:

"dummy","09171234567","","dummy","dummy","dummy","dummy"

답변1

쉼표로 구분된 방식으로 데이터를 읽으라고 지시했으므로 awk따옴표는 데이터의 일부가 되고 정수 비교는 실패합니다.

$ awk -F',' '{ print $2 }' file.txt
"09171234567"

대신 쉼표를 따옴표로 묶을 수 있습니다.

$ awk -F'"?,"?' '{ print $2 }' file.txt
09171234567

이 표현은 "?,"?"쉼표, 앞 및/또는 뒤에 선택적 큰따옴표"를 의미합니다.

최종 awk코드:

$ awk -F'"?,"?' '$2 >= 09170000000 && $2 <= 09179999999' file.txt
"dummy","09171234567","","dummy","dummy","dummy","dummy"

어떤 블록의 조건도 true로 평가되지 않으면 {...}현재 입력 라인이 출력됩니다.

답변2

인용문 안의 열#2는 텍스트 "..."이고 정수 비교를 수행하고 있기 때문입니다. 다음과 같이 구분 기호 중 하나로 정의한 다음 두 가지 를 "모두 기준으로 열 5를 비교하면 이제 열 5가 됩니다.,"

awk -F'[",]' '{if ($5>= 09170000000 && $5 <= 09179999999) print $0 }' infile

또는 짧게 말하면:

awk -F'[",]' '$5>= 09170000000 && $5 <= 09179999999' infile

,2 와 구분 기호를 사용하면 이제 "열 번호가 (col#*3)-1제자리에 있게 됩니다. 즉 , $30이전에 열에 있었다면 지금은 열에 있다는 의미입니다 $89.

관련 정보