Bash 스크립트에서 줄의 마지막 번호를 선택하는 방법

Bash 스크립트에서 줄의 마지막 번호를 선택하는 방법

smartctl -a 명령의 출력은 다음과 같습니다.

9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 301

다음과 같이 bash 스크립트의 변수에 (올바른 용어인 경우) 넣었습니다.

$SMARTCTL_OUTPUT=`smartctl -a /dev/sda`

줄 끝의 숫자만 변수에 반환되도록 구문 분석하고 싶기 때문에 위의 예에서는 301변수에 넣습니다 $POWER_ON_HOURS.

나는 grep을 사용해 보았습니다.

$SMARTCTL_OUTPUT=`smartctl -a /dev/sda | grep "Power_On_Hours"`

하지만 이는 9 Power_On_Hours 0x0032 100 100 000 Old_age Always -내가 관심이 없는 다른 텍스트( )를 반환합니다.

줄 끝의 숫자만 반환할 수 있나요?

답변1

사용하면 awk '{print $NF}' 목적이 달성됩니다. $NF마지막 필드를 참조합니다.데이터 추출에 사용되는 언어입니다.

AWK 프로그램은 다음과 같이 작성된 일련의 패턴 작업 쌍입니다.

''조건'' { ''작업'' }

awk '{print $NF}'  

마지막 필드는 항상 인쇄됩니다.

답변2

순수 bash로 이 작업을 수행할 수 있습니다.

POWER_ON_HOURS=${SMARTCTL_OUTPUT##[^0-9]}

숫자로 끝나지 않는 SMARTCTL_OUTPUT에서 가장 긴 접두사를 제거한 결과 문자열을 반환합니다.

답변3

저는 gawk를 정말 좋아하지만 시스템에 (g)awk를 설치하지 않고도 보다 유연한 접근 방식을 사용할 수 있습니다. 다음과 같이 명령의 출력을 bash 배열에 저장합니다(명령 주위에 백틱 표시가 있음).

array=(`smartctl -a /dev/sda`)

그런 다음 인덱스 번호로 배열의 모든 단어를 참조할 수 있습니다(아래 예 참조).

불행하게도 내 시스템에는 "smartctl"이 식별하는 장치가 없습니다. 따라서 "man uptime" 명령의 출력을 예제의 입력으로 사용했습니다.

array=(`man uptime`)

배열의 모든 요소를 ​​표시합니다.

echo ${array[@]}
UPTIME(1) FreeBSD General Commands Manual UPTIME(1) NAME uptime — show how long system has been running SYNOPSIS uptime DESCRIPTION The uptime utility displays the current time, the length of time the sys‐ tem has been up, the number of users, and the load average of the system over the last 1, 5, and 15 minutes. FILES /boot/kernel/kernel system name list SEE O w(1) HISTORY The uptime command appeared in 3.0BSD. FreeBSD 9.1 April 18, 1994 FreeBSD 9.1

특정 단어 표시: 배열 요소는 0부터 시작하여 계산됩니다. 따라서 7번째 단어는 "${array[6]}"이 됩니다.

"man uptime" 명령 출력의 19번째 및 17번째 단어(즉, "DESCRIPTION" 및 "SYNOPSIS"라는 단어)를 검색한다고 가정합니다.

echo ${array[18]} ${array[16]}
DESCRIPTION SYNOPSIS

"Arpith" 및 "read" 사용자의 영리한 접근 방식을 사용하면 다음과 같이 기억하기 쉬운 변수에 배열 요소를 저장할 수도 있습니다.

array2=(`ifconfig`)
read IPETH0 IPLO <<< $(echo ${array2[6]} {array2[46]}
echo $IPETH0 $IPLO
192.168.0.103 127.0.0.1

"이 줄의 마지막 필드"나 문자 마스크와 같은 것을 어지럽히지 마십시오. 포지션 번호만 사용하세요.

배열 인덱스는 양의 정수입니다. 따라서 쉘 스크립트에서 다양한 계산을 수행하여 특정 단어(예: 범위, 세 번째 단어 또는 for 루프 등)를 선택할 수 있습니다.

화타이

버니

관련 정보