关于linux:将awk的输出捕获到数组中的重击

Bash capturing output of awk into array

我陷入一个小问题。 我有一个将输出通过管道传输到awk的命令,但我想一个一个地捕获到阵列的输出。

我的例子:

1
myarr=$(ps -u kdride | awk '{ print $1 }')

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

1
output: PID 3856 5339 6483 10448 15313 15314 15315 15316 22348 29589 29593 32657 1

我还尝试了以下方法:

1
2
3
4
5
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 = '\
'
不会执行任何操作,并保留我的原始输出。 要进行这项工作,我需要做些什么改变?


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

1
2
3
4
5
6
7
8
9
10
11
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 —数组。


使用Bash的内置映射文件(或其同义词readarray)

1
mapfile -t -s 1 myarr < <(ps -u myusername | awk '{print $1}')

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

1
mapfile -t myarr < <(ps -u myusername -o pid=)