首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash将awk的输出捕获到数组中

Bash将awk的输出捕获到数组中
EN

Stack Overflow用户
提问于 2013-02-27 13:53:05
回答 2查看 72.7K关注 0票数 50

我被一个小问题卡住了。我有一个命令可以将输出通过管道传输到awk,但我希望将的输出逐个捕获到一个数组中。

我的例子:

代码语言:javascript
复制
myarr=$(ps -u kdride | awk '{ print $1 }')

但这会将我的所有输出捕获到一个用逗号分隔的巨大字符串中:

代码语言:javascript
复制
output: PID 3856 5339 6483 10448 15313 15314 15315 15316 22348 29589 29593 32657 1

我还尝试了以下几种方法:

代码语言:javascript
复制
IFS=","
myarr=$(ps -u kdride | awk '{ print $1"," }')

But the output is: PID, 3856, 5339, 6483, 10448, 15293, 15294, 15295, 15296, 22348, 29589, 29593, 32657,
1

我希望能够将每个单独的pid捕获到它自己的数组元素中。设置IFS = '\n'不会做任何事情,并保留我的原始输出。我需要做哪些更改才能使其正常工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-27 14:00:39

添加其他括号,如下所示:

代码语言:javascript
复制
myarr=($(ps -u kdride | awk '{ print $1 }'))

# Now access elements of an array (change "1" to whatever you want)
echo ${myarr[1]}

# Or loop through every element in the array
for i in "${myarr[@]}"
do
   :
  echo $i
done

另请参见bash — Arrays

票数 93
EN

Stack Overflow用户

发布于 2019-08-15 01:55:13

使用Bash的内置mapfile (或其同义词readarray)

代码语言:javascript
复制
mapfile -t -s 1 myarr < <(ps -u myusername | awk '{print $1}')

至少在GNU/Linux中,你可以格式化ps的输出,所以不需要awk-s 1

代码语言:javascript
复制
mapfile -t myarr < <(ps -u myusername -o pid=)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15105135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档