AWK를 사용하여 특정 열에서 특정 값을 가진 행 선택

AWK를 사용하여 특정 열에서 특정 값을 가진 행 선택

다음과 같은 큰 CSV 파일이 있습니다.

1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,25178
1,2,3,4,5,6,27986
1,2,3,4,5,6,-99

일곱 번째 열이 -99인 행만 선택하려고 하므로 출력은 다음과 같습니다.

1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99

나는 다음을 시도했다:

awk -F, '$7 == -99' input.txt > output.txt
awk -F, '{ if ($7 == -99) print $1,$2,$3,$4,$5,$6,$7 }' input.txt > output.txt

그러나 모두 빈 output.txt를 반환합니다. 누구든지 내가 뭘 잘못하고 있는지 말해 줄 수 있나요? 감사해요.

답변1

스크립트를 실행하는 파일에는 DOS 줄 끝이 있습니다. 아마도 Windows 컴퓨터에서 생성되었을 것입니다.

dos2unixUnix 텍스트 파일로 변환하는 데 사용됩니다 .

또는 다음을 통해 실행하세요 tr.

tr -d '\r' <input.txt >input-unix.txt

input-unix.txt그런 다음 원래의 올바른 코드를 사용하십시오 awk.


awk입력 파일 대신 코드를 수정하려면 다음 안내를 따르세요.

awk -F, '$7 == "-99\r"' input.txt >output.txt

이는 줄 끝의 캐리지 리턴을 고려합니다.

또는,

awk -F, '$7 + 0 == -99' input.txt >output.txt

이렇게 하면 일곱 번째 열이 숫자로 해석되어 캐리지 리턴이 "제거"됩니다.

비슷하게,

awk -F, 'int($7) == -99' input.txt >output.txt

또한 삭제됩니다 \r.

답변2

awk -F, '{if($7==-99)print $0}'

할 것이다...

답변3

awk -F',' '$7 ~ /-99/ {print $0}' filename.csv > result.csv
  1. 구분 기호 는 ','쉼표로 정의됩니다.

  2. $열을 정의합니다. 따라서 $7특별한 값을 갖고 싶은 열 번호를 정의하십시오. 여기 7.

  3. ~ /-99/검색하세요 -99. 필요한 것은 무엇이든 넣을 수 있습니다.

  4. $0파일의 모든 열을 나타냅니다. $1","$2","......특정 열만 인쇄하고 싶지 않다면 간단히 작성하시면 됩니다. (또는 $1$2...결과 구분 기호로 쉼표가 필요하지 않은 경우)

  5. > result.csvresult.scv터미널 에서 인쇄하는 대신 출력을 파일로 저장합니다 .

답변4

파티에 조금 늦었지만..그렇게 하면 효과가 있을 것 같아

awk -F, '$7 ~ /-99/' input.txt > output.txt

다음과 같이 따옴표를 추가하면 원본도 작동합니다.

awk -F, '$7 == "-99"' input.txt > output.txt

패턴 일치를 사용할 때 기본 작업은 인쇄하는 {print}것이므로

관련 정보