с bash
#!/usr/bin/env bash
disk=
cpu_usage=
memory_usage=
while true; do
read -r disk
read -r cpu_usage
read -r memory_usage
break
done < <(awk -f tst.awk)
printf '%s\n' "$disk" "$cpu_usage" "$memory_usage"
, где tst.awk
BEGIN {
while("df -hP " | getline) {
if ( $NF == "/" ) {
printf "Disk Usage: %d/%dGB (%s)\n", $3,$2,$5
}
}
while( getline < "/proc/loadavg" ) {
printf "CPU Load: %.2f\n", $(NF-2)
}
while( "free -m"| getline) {
if( $0 ~ /Mem:/) {
printf "Memory Usage: %s/%sMB (%.2f%)\n", $3,$2,$3*100/$2
}
}
}
Вместо отдельного скрипта для awk можно добавить код awk
внутри замещения Process.
done < <(awk 'BEGIN {
while("df -hP " | getline) {
if ( $NF == "/" ) {
printf "Disk Usage: %d/%dGB (%s)\n", $3,$2,$5
}
}
while( getline < "/proc/loadavg" ) {
printf "CPU Load: %.2f\n", $(NF-2)
}
while( "free -m"| getline) {
if( $0 ~ /Mem:/) {
printf "Memory Usage: %s/%sMB (%.2f%)\n", $3,$2,$3*100/$2
}
}
}'
)
Без while
l oop, с использованием { }
для группировки команд.
{
read -r disk_usage
read -r cpu_usage
read -r memory_usage
} < <( awk 'BEGIN {
while("df -hP " | getline) {
if ( $NF == "/" ) {
printf "Disk Usage: %d/%dGB (%s)\n", $3,$2,$5
}
}
while( getline < "/proc/loadavg" ) {
printf "CPU Load: %.2f\n", $(NF-2)
}
while( "free -m"| getline) {
if( $0 ~ /Mem:/) {
printf "Memory Usage: %s/%sMB (%.2f%)\n", $3,$2,$3*100/$2
}
}
}'
)
printf '%s\n' "$disk_usage" "$cpu_usage" "$memory_usage"