다음 스크립트를 이해해야 합니다.
HEADER='CPU pctUser pctNice pctSystem pctIowait pctIdle'
HEADERIZE="BEGIN {print \"$HEADER\"}"
PRINTF='{printf "%-3s %9s %9s %9s %9s %9s\n", cpu, pctUser, pctNice, pctSystem, pctIowait, pctIdle}'
CMD='sar -P ALL 1 1'
FORMAT='{cpu=$3; pctUser=$4; pctNice=$5; pctSystem=$6; pctIowait=$7; pctIdle=$NF}'
FILTER='/Average|Linux|^$|%/ {next} (NR==1) {next}'
$CMD | tee $TEE_DEST | $AWK "$HEADERIZE $FILTER $FORMAT $PRINTF" header="$HEADER"
echo "Cmd = [$CMD]; | $AWK '$HEADERIZE $FILTER $FORMAT $PRINTF' header=\"$HEADER\"" >> $TEE_DEST
이 스크립트는 실제로 CPU 사용률(sar 사용)을 확인하고 해당 값을 인쇄하는 데 사용됩니다. 이해하는 HEADER
데 문제가 있습니다 HEADERIZE
. PRINTF
이것이 어떻게 작동하는지.
답변1
스크립트를 작성하는 사람은 출력의 모양과 스크립트의 기능을 결정하는 모든 것을 더 쉽게 볼 수 있기를 원합니다. 그들은 당신을 더 쉽게 만들지 않는 것 같습니다 :).
awk의 작동 방식을 이해했다면(Google에서 검색하거나 읽어보세요 man awk
) 일련의 작업이 필요하다는 것을 알 수 있습니다.무늬 {
성명.... }
(지나치게 단순화한 것입니다.) HEADER
및 같은 이름 HEADERIZE
은 스크립트 상단에 값이 할당되고 나중에 값이 사용되는 쉘 변수이며 앞에 "$"가 붙습니다. 저 $AWK "$HEADERIZE
줄 보이세요? 스크립트는 awk를 실행합니다(아마 다른 곳에서는 awk 변수가 이와 유사한 것으로 정의되어 있을 것입니다 awk
) /usr/bin/awk
. awk에 대한 인수는 비어 있지 않은 두 번째 줄에 정의된 대로 HEADERIZE 변수의 값으로 시작됩니다. 따라서 해당 행은 실제로 다음과 같이 읽혀집니다( AWK
변수가 다음과 같이 정의되었다고 가정 awk
).
awk "BEGIN {print "$HEADER"}"
등.
이 모든 것이 어떻게 작동하는지 이해하려면 다음과 같은 것을 사용 하도록 변수를 바꾸 echo
거나 awk
재정의하십시오 .AWK
echo
export AWK=echo
그리고 스크립트를 다시 실행하세요. 에 전달되는 명령줄을 볼 수 있습니다 awk
.
하단에 두 개의 명령이 있는 이유는 TEE_DEST
이 스크립트를 실행하면 변수 값이라는 출력 파일에 두 개의 항목이 포함되기 때문인 것 같습니다. 하나는 변수 실행 명령줄의 출력이 CMD
이름이 지정된 파일에 저장되고 출력이 표시될 명령 $TEE_DEST
에 전달되는 첫 번째 명령으로 시작하는 것입니다.awk
단말기. 그런 다음 두 번째에는 echo
문자열을 스크립트에 넣고 Cmd = [$CMD]
해당 awk
스크립트의 출력도 파일에 추가합니다.$TEE_DEST
VARIABLE
다음을 사용하여 명명된 각 변수의 값을 쉽게 찾을 수 있습니다.
echo $VARIABLE
이를 통해 스크립트의 일부를 실행하고 내용을 터미널 창에 붙여넣어 검사할 수 있습니다. 저는 이것이 스크립팅을 배우는 좋은 방법이라는 것을 알았습니다.
네가 원한다면놓다AWK
변수의 값을 다음으로 덮어쓰라고 하면 위에서 제안한 대로 수행할 수 있습니다 echo
.
export VARIABLE=new value for the variable