내 데스크탑의 HW라는 폴더에 여러 개의 .csv 파일이 있고 cygwin을 사용하고 있으며 특정 열에서 문자열을 찾고 싶습니다. 예를 들어 X 열에서 ARD는 콘텐츠 값의 헤더이며 true이거나 false , ARD=true 개수를 찾고 싶습니다.
도와주세요...
답변1
키워드가 항상 같은 열(예: 열 번호 2)에 있으면 간단합니다.
cut -d, -f 2 file(s) | grep -c 'true'
즉, 열 2를 잘라내고(-f 2), ","를 필드 구분 기호로 사용하고(-d, ), 모든 true를 가져오고(grep) 개수를 계산합니다(-c).
좀 더 복잡하게 하려면 "ARD" 열을 검색해야 한다면
awk 'BEGIN {FS = ","} ; FNR == 1 { for ( i=1 ; i<=NF ; i++ ) { if ( $i=="ARD" ) { col=i } } } ; FNR >= 2 { print $col }' file(s) | grep -c 'true'
1) BEGIN { FS = "," }
각 작업(BEGIN) 앞에 쉼표를 ","
필드 구분 기호( FS=
) 로 사용합니다.
2) 파일의 첫 번째 행(즉, 헤더 행)의 경우( FNR == 1
) 모든 열에 대해( for ( i=1 ; i<=NF ; i++ )
) 문자열 "ARD"가 이 열에 있는지 확인합니다( if ( $i=="ARD")
). 그렇다면 변수를 col
열 번호 로 설정합니다.{ col=i }
3) 이제 열 번호를 알았으므로 파일의 첫 번째 줄(=헤더)(즉, 2보다 큰 모든 줄)을 생략하고 해당 열을 인쇄합니다 FNR >= 2 { print $col }
. 여기서는 col
이전에 정의한 변수를 사용합니다 .
grep
4) -c
"true" 발생 횟수를 ( ) 카운트하여 파이프 출력
5) 파일별 목록의 경우 bash 스크립트에서 for 루프를 사용합니다.
답변2
3개의 파일이 있다고 가정해 보겠습니다.
new.csv
Col1,Col2,ARD,Col4
1,2,true,3
1,2,true,3
1,2,true,3
1,2,false,3
1,2,false,3
1,2,false,3
new1.csv
:
Col1,Col2,ARD,Col4
1,2,true,3
1,2,true,3
1,2,false,3
1,2,false,3
1,2,false,3
1,2,false,3
new2.csv
:
Col1,Col2,ARD,Col4
1,2,true,3
1,2,false,3
1,2,false,3
1,2,false,3
1,2,false,3
1,2,false,3
하다:
awk -F',' '{print $3}' *.csv | grep -c true
산출:
6
가정:
이것급성 호흡기 질환항상 같은 열에 있음(예제에서는 열 3)
이 디렉터리의
grep
모든 파일을 찾아보시겠습니까?*.csv
답변3
사용을 고려해 보셨나요?앗그러면 구분선
grep TRUE | wc -l
결과를 계산하려면?
답변4
grep을 재귀적으로 사용하여 디렉토리의 모든 것을 찾을 수 있습니다
cd /path/to/dir/*
grep -r "ARD"
아니면 단순히
grep -r -l "ARD" /path/to/dir/*
원천: http://www.cyberciti.biz/faq/howto-recursively-search-all-files-for-words/
awk를 사용하여 csv 파일을 검색할 수도 있습니다. 예:
awk -F, '$X == ARD' HW
X는 열 번호를 나타내고, ARD는 키워드, HW는 위의 csv 파일을 나타냅니다.
원천:https://stackoverflow.com/questions/2373885/searching-a-csv-file-using-grep
이것은 또 다른 옵션으로도 사용 가능합니다
grep '^\([^|]*|\)\{X\}ARD|' HW
원천:http://www.unix.com/unix-for-dummies-questions-and-answers/123978-grepping-특이적-column.html