명령 출력에서 최대 온도 값을 추출하여 다음과 같은 셸 변수에 저장하고 싶습니다.
res="$(get temperature all)"
결과는 다음과 같습니다.
Device 0 avs data:
Temperature: 33.5 C
voltage1V0: 0.926 V
voltage1V8: 1.782 V
voltage3V3: 3.265 V
Device 1 avs data:
Temperature: 32.6 C
voltage1V0: 0.923 V
voltage1V8: 1.780 V
voltage3V3: 3.265 V
Device 2 avs data:
Temperature: 33.1 C
voltage1V0: 0.920 V
voltage1V8: 1.785 V
voltage3V3: 3.290 V
Device 3 avs data:
Temperature: 33.1 C
voltage1V0: 0.921 V
voltage1V8: 1.780 V
voltage3V3: 3.265 V
Temperature:
문자열 사이의 숫자 값을 추출하고 C
모든 장치 기록에서 최대 값을 찾고 싶습니다. 위의 경우 출력은 다음과 같아야 합니다.
33.5
온도값이 33.5, 32.6, 33.1, 33.1이기 때문에
위 명령의 출력은 다음과 같습니다.
- 때로는 단지 정보일 뿐이지만
Device 0
, - 때로는
Device 0
정보Device 1
- 가끔
Device 0
,,, 정보Device 1
Device 3
Device 4
따라서 최대 온도를 찾는 논리는 장치 수에 관계없이 보편적이어야 합니다(최대 개수는 4개이지만 사용 가능한 최소 장치 개수는 1개입니다).
예를 들어, 장치가 하나만 있는 경우 최대 온도는 장치 0 온도와 같아야 하며, 그렇지 않으면 비교하고 인쇄해야 합니다.
편집 1- 반드시 사용해야 하거나 sed
옵션 awk
이 grep -P
제공되지 않습니다.
echo 'Here is a string, and Here is another string.' | grep -oP '(?<=Here).*(?=string)'
grep: invalid option -- 'P'
답변1
각 장치에는 다음이 포함될 수 있다고 가정합니다.단 하나"온도"를 읽고 최대값만 인쇄하려는 경우(관련 장치 번호는 인쇄하지 않음) 다음을 시도해 볼 수 있습니다.
awk '$1=="Temperature:" {if ($2>max) max=$2} END{printf("Maximum: %.1f\n",max)}'
그러면 공백으로 구분된 첫 번째 필드( ) $1
가 있는 모든 행을 구문 분석하고 숫자 온도 값인 Temperature:
두 번째 필드( )를 확인합니다 . $2
값이 지금까지의 가장 큰 값보다 크면 변수에 저장됩니다 max
(처음에는 0인 것처럼 동작함).
마지막으로 찾은 최대값을 인쇄합니다.