grep 또는 awk를 사용하여 첫 번째 문자를 기준으로 특정 줄을 무시하면서 각 줄의 문자 수를 어떻게 계산할 수 있습니까?

grep 또는 awk를 사용하여 첫 번째 문자를 기준으로 특정 줄을 무시하면서 각 줄의 문자 수를 어떻게 계산할 수 있습니까?

매우 간단합니다. 파일에 다음 텍스트가 있습니다.

#number
3222
#number
3311

나는 다음을 사용하고 있습니다 :

awk '{인쇄 길이}' file.txt

다음과 같이 인쇄됩니다.

7

4

7

4

그러나 나는 숫자의 길이를 인쇄하고 "#"으로 시작하는 줄을 무시하여 인쇄하기를 원합니다.

4

4

답변1

awk첫 번째 문자가 다음이 아닌 줄의 길이만 인쇄하도록 지시합니다 #.

awk '!/^#/ { print length }' file

!/^#/블록 앞에는 정규식 일치 테스트가 옵니다. 패턴이 ^#일치하면 다음 연관 블록은 다음과 같습니다.아니요(일치의 의미가 바뀌기 때문에 !) 고려됩니다.

이 패턴은 현재 줄의 시작 부분에서 a 를 ^#일치시키려고 시도합니다 .#

또는 숫자만 포함된 줄의 길이를 출력하려는 ​​경우:

awk '/^[[:digit:]]+$/ { print length }' file

시작과 끝 부분에 앵커가 있으므로 이 패턴은 ^[[:digit:]]+$하나의 연속 숫자로 구성된 줄에만 일치합니다. 숫자가 아닌 문자가 포함된 줄을 피하기 위해 를 사용할 수도 있습니다.^$!/[^[:digit:]]/

또는 바로 다음 줄의 길이만 출력합니다 #number.

awk '$0 == "#number" { getline; print length }' file

여기서는 현재 줄과 문자열 비교를 수행합니다.정확히 #number(질문의 샘플 데이터에 표시된 것처럼) 다음 줄을 읽고 getline그 길이를 출력합니다.

관련 정보