특수 문자가 포함된 값의 개수를 출력합니다.

특수 문자가 포함된 값의 개수를 출력합니다.

아래와 같은 텍스트 파일이 있습니다. 두 번째 열을 확인하여 특수문자가 포함된 값의 개수를 출력하고 싶습니다.

101,aaa,d01
102,*&%,d02 
103,$%&,d03
104,###,d04

나는 awk를 사용해 본다:

awk -F, '{if ($2 ~ (/^[$*&%#]+$/) count+1;} END {print count}' sample.txt

하지만 작동하지 않습니다. awk 말고 다른 방법은 없나요?

답변1

이를 수행하는 방법에는 여러 가지가 있습니다. 귀하의 질문에 이것을 지정하지 않았지만 귀하의 awk접근 방식은 다음을 포함하는 두 번째 필드를 계산하는 것입니다.완전히특수 문자가 바로 내 솔루션이 수행하는 작업입니다. 이것이 원하는 것이 아니고 하나 이상의 특수 문자가 포함된 필드만 계산하려면 ^일치 연산자에서 및를 제거하십시오.$

  1. 이상한:

    awk -F, '{if($2 ~ /^[$*&%#]+$/) cnt++;} END {print cnt}' sample.txt
    
  2. 진주:

    perl -F, -lane '$cnt++ if $F[1]=~/^[\$*&%#]+$/; END{print $cnt}' sample.txt
    
  3. grep(항상 필드가 3개만 있다고 가정):

    grep -cP ',[\$*&%#]+,' sample.txt 
    
  4. 껍데기

    count=0;
    while IFS="," read one two three; do 
        [[ -z ${two##[\*&%\$#]*} ]] && let count++; 
    done < sample.txt; 
    echo $count
    

답변2

이건 어때

awk -F, '{if ($2 ~ /[^:alnum:]/) l=length($2);print $0" "l}' sample.txt
101,aaa,d01 
102,*&%,d02 3
103,$%&,d03 3
104,###,d04 3

문자가 alnum이 아닌 경우 행당 "특수 문자" 수를 인쇄합니다.

답변3

다른 사람들이 언급했듯이 명확하지 않습니다.정확히수행하려는 작업이지만 다음과 같이 메서드 구문을 수정할 수 있습니다.

awk -F, '$2 ~ /^[$*&%#]+$/ { count++ } END {print count}' sample.txt

관련 정보