6500개의 행과 2개의 열이 있는 데이터 파일이 있습니다.
1ES9 0.927536231884058
1ET1 1.0
1EU1 0.8915343915343915
... ... ...
파일에서 1.0의 발생 횟수를 계산하고 싶습니다.
다음 grep
명령을 사용했는데 출력은 1001이었습니다.
grep -o '1.0' data_file.txt | wc -l
그런 다음 Windows 10에서 Notepad++ 도구를 실행했습니다 Find->Count
. 144를 줍니다.
와 왜 다른가요 grep
?
답변1
grep
사용일반적인 표현기본적으로 "1.0"은 "1" 뒤에 임의의 문자 뒤에 "0"이 오는 것과 일치하는 정규식입니다. 귀하의 예에서 라인
1EU1 0.8915343915343915
"1 0" 일치 항목이 생성됩니다.
grep
"1.0" 발생 횟수를 정확하게 계산하려면 고정 문자열을 검색 하도록 요청해야 합니다 .
grep -Fo 1.0 data_file.txt | wc -l
또는 마침표와 일치하도록 마침표를 "이스케이프"합니다.
grep -o '1\.0' data_file.txt | wc -l
하위 문자열이 아닌 값으로 1.0만 계산하려는 경우(예를 들어grep
"11.002")에서는 단어만 일치 하도록 요청해야 합니다 .
grep -wo '1\.0' data_file.txt | wc -l
wc
행당 하나의 일치에만 관심이 있고 grep
행 수를 계산할 수 있으므로 다음 중 어떤 것도 포함할 필요가 없습니다 .
grep -cw '1\.0' data_file.txt
"-"는 단어가 아닌 문자이므로 여전히 "-1.0"과 일치합니다. 이것이 문제인 경우 패턴을 확장하고 단어 검색을 중지할 수 있습니다.
grep -c ' 1\.0$' data_file.txt
또는 AWK와 같은 도구를 사용하여 숫자 값을 일치시킵니다.
awk '$2+0 == 1 { c++ } END { print c }' data_file.txt
(0을 추가하면 $2
숫자로 해석됩니다.)