2016-10-10 4 views
0

안녕 내 데이터 세트가 나는 세 번째 colmn에 빈이있는 행을 계산하기 AWK 또는 GREP을 사용하려고CSV는 KSH

4,a,1.5 
t,6,, 
6,t,h 

아래 표와 같은 간단 세 번째 열에서 빈 값을 찾을 수 있습니다. 이 경우에는 중간에 하나만 공백이 있기 때문에 1이됩니다. 지금까지 시도한 것은 아래에 있습니다. 로그인은 awk를 사용하여 빈 문자열을 검색 한 다음 grep find와 동일하게 계산합니다. 세 번째 열에 공백이있는 곳을 찾아서 계산합니다.

COUNT=$('awk '' $DATAFILE | wc -l') 
COUNT=$('grep -e '.*,.*,,' $DATAFILE' | wc -l) 

답변

1
awk -F, '$3==""{c++} END{print c+0}' file 
+0

한 가지를 추가해야합니다. 이것은 스크립트에 있습니다. 그래서 $ 3은 이미 스크립트에 전달되는 변수에 의해 사용됩니다. 해당 매개 변수에 대해 경고하지 않도록 어떻게 변경할 수 있습니까? 이것은 명령 행에서 완벽하게 작동하지만 내 스크립트에서는 작동하지 않습니다. – user3753693

+0

awk 스크립트의 $ 3은 입력의 세 번째 필드입니다. 우연히도 $ 3이라는 쉘 위치 매개 변수와 아무 관련이 없습니다. 당신은 당신이 겪고있는 문제에 대해 더 분명하게해야 할 것입니다. –

+0

은 스크립트에 count = $ "(awk -F, '$ 3 ==" "{C++} END {print c + 0}'$ DATAFILE)"입니다. 그것이 실행될 때 스크립트는 3 달러를 내게 보여준 명령에 $ 3을 넣습니다. – user3753693

1

귀하의 그렙 많은 따옴표에 있습니다

count=$(grep -E ".*,.*,," $DATAFILE | wc -l) 

은 조금 일 것입니다,하지만 당신은 한 emty 네 번째 필드 라인과 일치하지 않습니다.

더 나은 당신은 여기에 세 번째 필드가 될 것을 고려 않는,이 상황에 대해 아무 말도하지이 여전히

field1,"field 2 with , insides quotes",, 

귀하의 질문과 같은 입력에 문제를 줄 것이다

count=$(grep -E "^[^,]*,[^,]*,," $DATAFILE | wc -l) 

것 같다? 그것은 또 다른 질문이 될 것입니다.

편집 : @Sundeep은 grep -c을 사용할 수 있으며 wc -l은 사용하지 않아도됩니다. 나는 OP의 대답에서 무엇이 잘못되었는지 보여 주려고했으나 -c을 사용하도록 조언을 추가해야했습니다.

+0

세 번째 필드는 십진수 또는 공백입니다. 처음 두 필드는 정적이며 세 번째 필드는 줄 끝으로 병합되는 소수입니다. 그들은 얼마나 많은 사람들이 세 번째 필드에 십진수를 가지고 있는지 알고 싶어합니다. 또한 처음 두 열의 문자열 주위에 따옴표가 있습니다. – user3753693

+0

'-c' 옵션을 사용하지 않는 이유는 무엇입니까? 예 :'grep -c '^ [^,] *, [^,] * ,,'' – Sundeep