tail -f ./somefile
명령 에 대한 입력 과 같은 명령을 사용하고 있다고 가정해 보겠습니다 awk
. awk를 사용하여 | wc -l
명령 끝에서 a를 실행하는 것처럼 연속적으로 일치 항목을 합산하고 싶지만 입력은 계속 수신됩니다... AWK가 입력을 합산하면 END{}
명령의 일부와 함께 표시됩니다. 여전히 입력을 받고 있으며 END{}
명령의 해당 부분은 실행되지 않습니다. 그러면 명령 awk
에서 입력을 계속 받으려면 어떻게 해야 합니까? 대신 코드 조각에서 사용할 tail -f ./somefile
수 있는 반복 메커니즘이 있습니까 ?awk
END{}
답변1
"일치"가 정확히 어떻게 작동하는지 언급하지 않았으므로 /pattern/ {}
규칙과 일치하는 줄이 개수를 증가시키는 것으로 가정합니다.
명령 끝에서 a를 실행하는
awk
것과 같이 를 사용하여 지속적으로 일치 항목을 합산하고 싶습니다.| wc -l
입력이 무한대라면, 증가할 때마다 카운트를 표시하고 싶겠죠?
END {}
기본적으로 이 경우에는 규칙을 사용하지 마십시오. 다음 AWK 프로그램 예제와 같이 증가시키는 카운터를 인쇄하십시오.
# Initializer
BEGIN {
counter=0;
}
# Pattern A
/^COUNT$/ {
++counter;
print counter;
}
# Pattern B
/^HERE$/ {
++counter;
print counter;
}
이 프로그램은 입력에 한 줄이 나타날 때마다 계산하고 카운터 값을 표시합니다 COUNT
.HERE
일치시킬 패턴이 많고 코드 중복을 최소화하려는 경우 다음을 사용할 수 있습니다.AWK 기능계산과 표시를 하나의 작업으로 결합합니다.
# Initializer
BEGIN { counter=0; }
# Count and Display Function
function count() {
++counter;
print counter;
}
# Pattern A
/^COUNT$/ { count(); }
# Pattern B
/^HERE$/ { count(); }
스크린샷(위의 두 프로그램 모두 동일한 출력을 제공합니다):