【发布时间】:2021-08-06 16:23:47
【问题描述】:
我正在尝试解析 Linux df 工具的输出以用于机器状态报告。我使用几乎相同的代码来解析 ps 工具的输出,它工作正常(所有字段在读取循环中都可用)但是在下面的代码中,当我从命名的读取时,awk 的第一个字段输出(percentUsed)丢失了管道。
#!/bin/sh
mkfifo dfPipe0
IFS=" "
df -h | awk '{ print $6" "$3" "$7" "$1 }' > dfPipe0 &
while read -r percentUsed size mountedOn fileSystem
do
printf "%s\n" "${percentUsed} | ${size} | ${mountedOn} | ${fileSystem}"
done < dfPipe0
rm dfPipe0
示例 df + awk 输出
$ df -h | awk '{ print $6" "$3" "$7" "$1 }'
Use% Size Mounted Filesystem
0% 1.9G /dev devtmpfs
- 0 /sys/kernel/security securityfs
4% 1.9G /dev/shm tmpfs
$
【问题讨论】:
-
为什么要使用命名管道而不是仅仅通过管道连接到
while循环? -
为什么需要
awk?df -h | while read -r filesystem size used avail percentUsed mountedOn -
检查您的脚本以确保其中没有
\r字符。 -
请包含第一个脚本的输出。
-
fwiw ...我将
df/awk输出(来自问题)转换为dfPipe0,并且提供的代码按预期工作(即,没有丢失字段)
标签: bash scripting named-pipes