텍스트와 숫자가 포함된 문자열을 개행으로 다시 작성하고 텍스트 삽입

텍스트와 숫자가 포함된 문자열을 개행으로 다시 작성하고 텍스트 삽입

즉, 단일 행 출력 문자열을 여러 행으로 분할하고 각 원본 문자열에 호스트 이름을 태그 지정하고 싶습니다.

호스트 이름 프로세스 이름 CPUCore

출력=$(ssh -q -o "StrictHostKeyChecking yes" $ssh_host 'ps -eo comm,lastcpu | grep rrcp')

아래와 같이 출력을 반환하여 루프를 삽입하려면 어떻게 해야 합니까?

rrcpd 17 rrcpd 0

다음과 같이 다시 작성되었습니다.

Hostname1 rrcpd 17
Hostname1 rrcpd 0

노트

  • 숫자는 0-32일 수 있습니다.

  • 호스트 이름은 변수 문자열 $myhost입니다.

  • 텍스트가 변경됩니다. 이는 엄밀히 말하면 rrcpd가 아니라는 의미입니다.

    rrcpd 17 rrcpd 0

    치즈3 케이크 8

    고양이 9 개 3

각 호스트에서 실행할 명령

출력=$(ssh -q -o "StrictHostKeyChecking yes" $ssh_host 'ps -eo comm,lastcpu | grep rrcp')

grep을 제거하면 3~5개의 프로세스를 거쳐 출력이 다시 나올 수 있기 때문에 각 출력을 분할하고 원본 파일에 호스트 이름을 추가하여 각 출력에 레이블을 지정할 수 있도록 하고 싶습니다. 각 호스트에서 어떤 프로세스가 실행되고 있는지 확인하고 있습니다.

rrcpd 0 rrcp_mon.sh 24

RRCPD 0

RRCPD 0

rrcpd 0 rrcpd 1

rrcpd 0 rrcpd 0 rrcp_mon 24 rrcp_mon 24

RRCPD 0

RRCPD 0

rrcpd 17 rrcpd 0

ard 9 ssh 32 httpd 21 bax 22

아래 제공된 내용을 수정하여 작동하게 만들었습니다.

#!/bin/bash
for remote in $(cat ssh_hosts2.txt)
do
    ssh -q -o StrictHostKeyChecking=yes "$remote" ps -eo comm,lastcpu |
    sed "s/^/$remote /"
done

답변1

이것을 시도하십시오,

주어진 샘플 출력을 /tmp/test.txt 파일에 저장했습니다.

 xargs -n 2 | sed 's/^/Hostname1 /' 
  • -n라인당 최대 매개변수를 나타냅니다.

예를 들어;

cat /tmp/test.txt  | xargs -n 2 | sed 's/^/Hostname1 /g' 
Hostname1 rrcpd 17
Hostname1 rrcpd 0
Hostname1 Cheese 3
Hostname1 cakes 8
Hostname1 Cats 9
Hostname1 dogs 3

답변2

표시된 데이터 유형(명령 출력에서 ​​한 줄에 2개 이상의 필드)을 볼 수 있는 유일한 이유는 ssh+ 호출의 출력을 변수로 수집한 다음 이를 올바르게 참조하지 않고 출력하는 경우입니다. 다행히도 변수의 데이터를 전혀 수집할 필요가 없습니다.sshpsoutput=$(ssh ...)echo $outputecho "$output"

while read remote; do
    ssh -n -q -o StrictHostKeyChecking=yes "$remote" ps -eo comm,lastcpu |
    awk -v host="$remote" '/rrcp/ { print host, $1, $2 }'
done <hosts.txt

여기서는 명령에서 직접 읽고 원래 awk코드에서 ssh수행된 작업 도 수행합니다. 두 개의 필드가 포함된 행을 가져오고 각 필드 쌍 앞에 grep지정된 호스트 이름(에서 읽음 )을 붙인다고 가정합니다.hosts.txt

또는,

while read remote; do
    ssh -n -q -o StrictHostKeyChecking=yes "$remote" ps -eo comm,lastcpu |
    sed "s/^/$remote /"
done <hosts.txt

여기서는 텍스트 파일에서 읽은 호스트 이름을 각 줄의 앞에 붙이기만 하면 됩니다.

관련 정보