사용자 입력을 호출하는 방법

사용자 입력을 호출하는 방법

패턴을 일치시킨 다음 그 뒤에 두 줄을 인쇄하려고 합니다. 다음 코드를 사용하면 이 작업을 성공적으로 수행할 수 있습니다.

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. 그렇지 않으면 .

관련 정보