다음과 같은 큰 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 컴퓨터에서 생성되었을 것입니다.
dos2unix
Unix 텍스트 파일로 변환하는 데 사용됩니다 .
또는 다음을 통해 실행하세요 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
구분 기호 는
','
쉼표로 정의됩니다.$
열을 정의합니다. 따라서$7
특별한 값을 갖고 싶은 열 번호를 정의하십시오. 여기7
.~ /-99/
검색하세요-99
. 필요한 것은 무엇이든 넣을 수 있습니다.$0
파일의 모든 열을 나타냅니다.$1","$2","......
특정 열만 인쇄하고 싶지 않다면 간단히 작성하시면 됩니다. (또는$1$2...
결과 구분 기호로 쉼표가 필요하지 않은 경우)> result.csv
result.scv
터미널 에서 인쇄하는 대신 출력을 파일로 저장합니다 .
답변4
파티에 조금 늦었지만..그렇게 하면 효과가 있을 것 같아
awk -F, '$7 ~ /-99/' input.txt > output.txt
다음과 같이 따옴표를 추가하면 원본도 작동합니다.
awk -F, '$7 == "-99"' input.txt > output.txt
패턴 일치를 사용할 때 기본 작업은 인쇄하는 {print}
것이므로