awk를 사용하여 첫 번째 열의 값을 기반으로 dat 또는 csv 파일을 필터링하는 데 문제가 있습니까?

awk를 사용하여 첫 번째 열의 값을 기반으로 dat 또는 csv 파일을 필터링하는 데 문제가 있습니까?

데이터 파일이 있습니다.

> head file.dat 
"201731","474","1000522966","0.2670"
"201732","474","1000522966","0.3163"
"201733","474","1000522966","0.3902"
"201734","474","1000522966","0.4479"
"201735","474","1000522966","0.5960"
"201736","474","1000522966","0.2598"
"201737","474","1000522966","0.3937"
"201738","474","1000522966","0.3558"
"201739","474","1000522966","0.3344"
"201740","474","1000522966","0.5544"

"201731"이 있는 행만 유지되도록 필터링하고 싶습니다.

나는 여러 awk 명령을 시도했습니다.

awk -F , '{ if ($1 == "201731") { print } }' file.dat | head
awk -F '","' 'BEGIN {OFS=","} { if (toupper($1) == "201731")  print }' file.dat | head 
awk -F '","' '{ if (toupper($1) == "201731")  print }' file.dat | head 
awk -F ',' '{ if (toupper($1) == "201731")  print }' file.dat | head 

그들 중 누구도 작동하지 않습니다. 둘 다 오류 없이 실행되고 출력이 없는 빈 프롬프트가 표시됩니다.

저는 awk 버전 GNU Awk 3.1.7을 사용하고 있습니다.

이 웹사이트에도 거의 동일한 질문과 답변이 존재하지만, 그것마저도 작동하지 않습니다. 내가 뭘 잘못했나요?

답변1

귀하의 코드:

awk -F , '{ if ($1 == "201731") { print } }' file.dat

$1필드 구분 기호를 사용하여 읽을 때 ,데이터에 있는 큰따옴표도 포함된다는 사실을 제외하면 이는 거의 정확합니다. 다른 시도도 본질적으로 유사하지만 toupper()숫자에 어떤 영향이 있을 것이라고 생각하는지 잘 모르겠습니다 .

$1 ~ /201731/정규식을 사용하여 첫 번째 필드 일치를 사용하거나 (또는 $1 ~ /^"201731"$/잘못된 긍정을 방지하기 위해 처음부터 끝까지 필드 내용을 완전히 지정) 정규식 수식 일치를 수행하는 대신 고정 문자열을 확인하려는 경우 사용할 수 있지만 테스트 필드에 대해 \"201731\".

그래서 당신은

awk -F ',' '$1 ~ /^"201731"$/' file.in

또는

awk -F ',' '$1 == "\"201731\""' file.in

답변2

주문하다:

awk '/"201731"/' file

201731이 포함된 행만 출력됩니다.

내가 당신의 임무를 잘못 이해했다면 정정해 주십시오.

관련 정보