将 awk 命令的输出分配给数组 linux

将 awk 命令的输出分配给数组 linux

我有一个场景,我想将命令运行输出的值存储到数组

我有一个如下所示的数据集

ID|SAL|COST|PER|TAG
1"|"10.1"|"12.22"|"10.1"|"A" 
2"|"10.223"|"12.333"|"10.1"|"B"

运行以下命令后,我得到的列输出总和为

awk -F"|" 'NR==1{for(i=1;i<=NF;i++){if ($i ~ /SAL|COST/){print i;}}}' demo.txt

2
3

但问题是我希望生成的输出需要存储在数组中我正在使用以下方法,但无法使用mapfile -t

mapfile -t array < <(awk -F"|" 'NR==1{for(i=1;i<=NF;i++){if ($i ~ /SAL|COST/){print i;}}}' demo.txt)

当我打印时,echo "${array[@]}"它只给我一个输出值,而不是所有值

output:
3

**需要打印所有输出值。当我回显数组时**

2
3

答案1

从 bash 手册页:

数组使用复合赋值形式进行赋值 name=(value1 ... valuen)

所以你可以这样分配它:

myarray=( $(awk -F"|" 'NR==1{for(i=1;i<=NF;i++){if ($i ~ /SAL|COST/){print i;}}}' demo.txt) )

然后是以下内容:

echo ${myarray[@]}
echo "first: ${myarray[0]}"
echo "second: ${myarray[1]}"

应该给出这个输出:

2 3
first: 2
second: 3

答案2

完全支持 Kusalananda 在他的评论中所说的内容,让我补充一下,您的明显问题可以通过对命令进行轻微修改来解决:

$ IFS=$'\n'
$ echo "${array[*]}"
2
3

相关内容