다음 명령이 있지만 아무것도 출력되지 않습니다. 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
.