6번째 위치에 "Happy"라는 특정 단어가 포함된 행 수를 찾아야 하는 CSV 파일이 있습니다. 쉼표 5개 뒤에.
그래서 나는 이것을 쓰고 있습니다 :
grep -P -c ",\{5,\}"'Happy' file.csv
하지만 0을 반환합니다.
파일 내용은 다음과 같습니다.
123, abc, def, ghi, e444, 해피, 224, e44
답변1
grep -E '^([^,]*,){5}Happy' <in >out
이렇게 하면 찾을 수 있습니다.Happy
다섯 번째 쉼표 바로 옆에 있는 경우에만 해당됩니다. 6번째 필드 내 어디에서나 찾으려면 약간의 호흡 공간을 추가하십시오.
grep -E '^([^,]*,){5}[^,]*Happy' <in >out
일치하는 행만 계산하려면 다음 -c
옵션을 사용하세요.
grep -cE '^([^,]*,){5}[^,]*Happy' <in >out
저는 정규식에 매우 익숙하지만, 그렇지 않더라도 다른 유형보다 re 구문을 선택할 것 같습니다. 몇 가지 기준선을 익히면 나머지도 제자리에 있게 됩니다. 정규식은 매우 적은 수의 기본 구성 요소를 여러 방법으로 결합하여 입력을 설명합니다.
*
클린트- 이전 표현식이 0회 이상 발생함을 나타냅니다.
[
대괄호 표현]
- 어떤 일이 발생했음을 나타냅니다.(
^
거부될 수도 있음)문자 세트 포함
- 어떤 일이 발생했음을 나타냅니다.(
{
최소,
최대}
반복 횟수이전 표현식의 발생 횟수를 지정합니다.
확장 정규식 메타 문자
?
는 의 약어입니다{0,1}
.
(
하위 표현식)
- 포함된 모든 표현식을 단일 표현식으로 수집합니다.
.
특징- 단일 문자와 일치
^|$
^
다음 표현식의 줄 시작 앵커 포인트,|
표현식 간의 교대 또는$
줄 끝 앵커 포인트를 나타냅니다 .
이것이 기본입니다. POSIX -E
확장 정규식 구문에는 다음도 포함됩니다.클라인 +
- 이는 다음과 관련이 있습니다.*
필요를 제외한 모든 측면마지막 하나이전 표현과 일치합니다. 대괄호 표현식에는 특히 내부 문자 클래스 및 반복과 일치하는 방법 과 관련된 [
다양한 미묘함이 있습니다 . 실제로 대부분의 구현]
[(:|.|=)
(=|.|:)]
연장하다확장된 re 구문은 이전 하위 표현식에 대한 최소한 기본 정규식 역 \[num]
참조를 처리할 수 있습니다.(
)
하지만 기본적으로 생각해 보면 위의 표현 중 하나 또는 다른 단일 문자는 그 자체로 표현이며, 모두 결합되어 원하는 일치 항목을 설명하는 전체 표현이 됩니다.
이 모든 것을 종합하면 grep
위의 표현식은 다음과 같이 분류됩니다.
^([^,]*,){5}Happy
- 가장 왼쪽 위치부터 시작하여 일치하는 줄에는 0개 이상의 쉼표가 아닌 문자로 구성된 시퀀스가 5개 이하로 포함되어야 합니다. 각 시퀀스 뒤에는 쉼표 문자가 오고 모든 시퀀스 뒤에는 문자열이 옵니다.
Happy
.
- 가장 왼쪽 위치부터 시작하여 일치하는 줄에는 0개 이상의 쉼표가 아닌 문자로 구성된 시퀀스가 5개 이하로 포함되어야 합니다. 각 시퀀스 뒤에는 쉼표 문자가 오고 모든 시퀀스 뒤에는 문자열이 옵니다.
답변2
넌 할 수있어:
grep '^[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,Happy' file.txt
줄 시작 부분부터 5개의 쉼표가 있다고 가정하고 줄의 아무 곳에서나 시작하는 경우 이니셜을 제거하세요 ^
.
패턴은 단순히 연속해서 5개 이상의 쉼표가 있는 줄을 찾습니다.
답변3
awk
CSV 파일로 작업할 때 명령어를 사용하는 것이 더 간편하고 쉬울 것 같아요 . 필드 개념을 자연스럽게 지원하므로 삶이 훨씬 쉬워집니다.
awk -F, '$6 == "Happy" { count++ } END { print count }' file.csv
명령은 다음과 같이 분류됩니다.
awk - The command to run
-F, - Use a comma as the field separator
$6 == "Happy" - Only match lines where the sixth field equals "Happy"
{ count++ } - For each line matched, add one to the "count" variable
END - When all that is done...
{ print count } - ...print the value of "count"
file.csv - The file to read from