我有一个场景,我想将命令运行输出的值存储到数组
我有一个如下所示的数据集
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