매우 간단합니다. 파일에 다음 텍스트가 있습니다.
#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
그 길이를 출력합니다.