배열을 값으로 사용하여 bash 변수를 인쇄하는 방법

배열을 값으로 사용하여 bash 변수를 인쇄하는 방법

상태 표시줄에 대한 스크립트를 작성했습니다 dwm. 그 중 일부는 시스템의 각 코어에 대한 현재 CPU 사용량을 찾는 것입니다. 스스로 방법을 찾았지만 그 안의 버그를 수정하는 데 도움이 필요합니다. 이것은 주문입니다: top -bn 2 -d 0.5 | grep -F '%Cpu' | tail -n 4 | awk '{print $3}'. 이는 top기본적으로 각 코어를 표시한다고 가정합니다. top을 누른 1다음 W현재 구성을 .toprc홈 폴더의 파일 에 저장하면 됩니다 . 이제 top열 때마다 모든 코어가 표시됩니다. 앞서 언급한 명령에는 다음과 같은 변수에 할당할 때 단점이 있습니다.

CPU=$(top -bn 2 -d 0.5 | grep -F '%Cpu' | tail -n 4 | awk '{print $3}')

그런 다음 다음과 같이 사용하십시오. $CPU상태 표시줄에 원하는 출력이 표시되지만 각 CPU 백분율 사이에는 서로 분리된 두 개의 기호가 있으며 이를 합산합니다. 어떻게 제거합니까? 여기서 문자열 대신 배열을 사용하는 것과 관련이 있나요?xsetrootxsetroot -name "$CPU"vt

왼쪽에 질문이 보이시죠?그림.

주문하다:

top -bn 2 -d 0.5 | grep -F '%Cpu' | tail -n 4 | awk '{print $3}'

예제 출력:

14.3
12.0
8.0
10.0

이 스크립트를 사용하는 모든 사람을 위한 참고 사항: 코어의 CPU 사용량 100%이 명령에 의해 배열 출력에 도달하면 현재 부하가 있는 열이 한 열에서 3다른 열로 이동됩니다 2. 따라서 열의 출력이 awk '{print $3}'표시됩니다 . 괜찮다면 그냥 떠나세요. 그렇지 않은 경우 인쇄 막대를 사용할 수도 있습니다 . 그러면 그렇게 해 . 이러한 모든 함정을 피하는 솔루션은 다음과 같습니다.us,3awk2:

top -bn 2 | grep -F '%Cpu' | tail -n 4 | gawk '{print $2 $3}' | tr -s '\n\:\,[:alpha:]' ' '

답변1

나에게 값 사이의 "물건"은 다음을 사용할 때 얻을 수 있는 개행 문자(8진수 문자 코드 12)의 시각적 표현인 것 같습니다.

echo -e 'a\012b'

다음과 같이 출력을 파이핑해 볼 수 있습니다 tr '\n' ' '.

echo -e 'a\012b' | tr '\n' ' '

관련 정보