awk 사용 중 문제

awk 사용 중 문제

awk를 사용하는데 문제가 있습니다. 인수로 제공된 각 파일에서 최소 10 길이의 행 수를 인쇄합니다. 또한 해당 줄의 내용(처음 10자를 제외)이 인쇄됩니다. 파일 분석이 끝나면 파일 이름과 인쇄된 줄 수를 인쇄합니다.

지금까지 내가 한 일은 다음과 같습니다.

{
if(length($0)>10)
{
 print "The number of line is:" FNR
 print "The content of the line is:" substr($0,10)
 s=s+1
}
x= wc -l //number of lines of file
if(FNR > x) 
{
 print "This was the analysis of the file:" FILENAME
 print "The number of lines with characters >10 are:" s
}
}

이렇게 하면 파일 이름과 각 줄 뒤에 최소 10자가 있는 줄 수가 인쇄되지만 다음과 같은 것을 원합니다.

print "The number of line is:" 1
print "The content of the line is:" dkhflaksfdas
print "The number of line is:" 3
print "The content of the line is:" asdfdassaf
print "This was the analysis of the file:" awk.txt
print "The number of lines with characters >10 are:" 2

답변1

다음과 같이 시도해 보세요.

#!/usr/bin/gawk -f
{
    ## Every time we change file, print the data for
    ## the last file read (ARGV[ARGIND-1])
    if(FNR==1 && ARGIND>1){
        print "This was the analysis of file:" ARGV[ARGIND-1]
        print "The number of lines with >10 characters is:" s,"\n"
        s=0;
    } 
    if(length($0)>10){
        print "The line number is:" FNR
        print "The content of the line is:" substr($0,10)
        s=s+1   
    }
}
## print the data collected on the last file in the list
END{
    print "This was the analysis of file:" ARGV[ARGIND]
    print "The number of lines with >10 characters is:" s,"\n"
}

파일 에 대해 이 명령을 실행하면 다음 ab같습니다.c

$ ./foo.awk a b c
The line number is:2
The content of the line is:kldjahlskdjbasd
This was the analysis of the file:a
The number of lines with characters >10 is:1 

The line number is:2
The content of the line is:ldjbfskldfbskldjfbsdf
The line number is:3
The content of the line is:kfjbskldjfbskldjfbsdf
The line number is:4
The content of the line is:ldfbskldfbskldfbskldbfs
The line number is:5
The content of the line is:lsjdbfklsdjbfklsjdbfskljdbf
This was the analysis of the file:b
The number of lines with characters >10 is:4 

The line number is:1
The content of the line is: asdklfhakldhflaksdhfa
This was the analysis of the file:c
The number of lines with characters >10 is:1 

답변2

파일 끝 요약을 END {...}블록에 넣을 수 있습니다. 스크립트가 종료될 때 실행됩니다.

즉, false를 제거 하고 just로 x=wc -l변경합니다 .if (FNR > x) { ... }END { ... }

관련 정보