패턴을 일치시킨 다음 그 뒤에 두 줄을 인쇄하려고 합니다. 다음 코드를 사용하면 이 작업을 성공적으로 수행할 수 있습니다.
awk '/'202404'/{c=3}c&&c--' consolelog.log > testing.txt
202404
터미널에 입력할 수 있는 것으로 바꾸려고 합니다 . 지금까지 나는 시도했다
echo "Enter peak value"
read peak
awk '/${peak}/{c=3}c&&c--' consolelog.log > testing.txt
그러나 이것은 작동하지 않습니다.
반드시 awk, grep, sed 등을 사용할 필요는 없습니다. 사용자가 입력한 패턴과 일치하고 그 뒤에 2줄을 인쇄하면 됩니다.
***업데이트***** 나는 그것을 가지고 놀면서 작동하게 되었습니다. 이것은 내가 완전히 그리워하는 것입니다. 이것이 제가하는 것입니다.
awk 'c&&!--c;/'$peak'/{c=2}' consolelog.log > testing.txt
답변1
귀하의 코드:
echo "Enter peak value"
read peak
awk '/${peak}/{c=3}c&&c--' consolelog.log > testing.txt
큰 따옴표로 인해 쉘이 변수 확장을 수행하지 못하기 때문에 이는 작동하지 않습니다. awk
구문에서 약한 따옴표를 많이 사용하여 사용하기가 매우 어렵기 때문에 이는 좋습니다 .
awk
그러나 스크립트에서 환경 변수를 사용하는 방법은 다양합니다 .
자신만의 변수를 선언할 수 있습니다.
read peak
awk -vpeak="$peak" '$0 ~ peak { c=3 } c&&c--' consolelog.log > testing.txt
또는 방금 작성한 내용을 직접 볼 수도 있습니다 awk
.read
read peak
export peak
awk '$0 ~ ENVIRON["peak"] { c=3 } c&&c--' consolelog.log > testing.txt
답변2
echo "Enter peak value"
read peak
awk '/'"${peak}"'/{c=3}c&&c--' consolelog.log > testing.txt
이 시도.
Bash 변수를 사용하려면 먼저 작은따옴표를 닫아야 합니다. 큰따옴표 환경에 두는 것이 좋습니다 awk
. 그렇지 않으면 .