AWK 输出到 bash 数组

发布于 2024-09-30 08:32:22 字数 492 浏览 2 评论 0原文

我试图将一个简单命令的内容放入 bash 数组中,但是遇到了一些麻烦。

df -h | awk '{ print  $5" "$6 }'

给出我的系统上文件系统的使用百分比 输出如下所示:

1% /dev
1% /dev/shm
1% /var/run
0% /var/lock
22% /boot
22% /home
22% /home/steve

然后我想将每一行放入 bash 数组中 array=$(df -h| awk '{ print $5 $6 }')

但是,当我打印出数组时,我得到以下信息:

5%
/
1%
/dev
1%
/dev/shm
1%
/var/run
0%
/var/lock
22%
/boot
22%
/home
22%
/home/steve

Bash 正在基于空格而不是换行符形成数组,我该如何解决这个问题?

Im trying to put the contents of a simple command in to a bash array however im having a bit of trouble.

df -h | awk '{ print  $5" "$6 }'

gives percentage used in the file systems on my system
output looks like this:

1% /dev
1% /dev/shm
1% /var/run
0% /var/lock
22% /boot
22% /home
22% /home/steve

I would then like to put each of these lines into a bash array
array=$(df -h| awk '{ print $5 $6 }')

However when I print out the array I get the following:

5%
/
1%
/dev
1%
/dev/shm
1%
/var/run
0%
/var/lock
22%
/boot
22%
/home
22%
/home/steve

Bash is forming the array based on white spaces and not line breaks how can i fix this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦旅人picnic 2024-10-07 08:32:22

您需要重置 IFS 变量(用于数组的分隔符)。

OIFS=$IFS #save original
IFS=','
df -h | awk '{ print $5" "$6"," }'

You need to reset the IFS variable (the delimeter used for arrays).

OIFS=$IFS #save original
IFS=','
df -h | awk '{ print $5" "$6"," }'
五里雾 2024-10-07 08:32:22

您可以在 Bash 中执行此操作,无需 awk。

array=()
while read -a line; do
    array+=("${line[4]} ${line[5]}")
done < <(df -h)

You could do this in Bash without awk.

array=()
while read -a line; do
    array+=("${line[4]} ${line[5]}")
done < <(df -h)
倦话 2024-10-07 08:32:22

你可以使用这个:

eval array=( $(df -h | awk '{ printf("\"%s %s\" ", $5, $6) }') )

You may use this:

eval array=( $(df -h | awk '{ printf("\"%s %s\" ", $5, $6) }') )
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文