数据集文件名“ demo.txt”
ID|SAL|COL|PER|TAG|GER
1"|"1.11"|"2.22"|"1.1"|"2.2"|D"
2"|"1.234"|"3.234"|"2.2222"|"2.34"|"B"
3"|"1.234"|"35.23"|"3.2"|"2.34"|"A"
我创建了一个将自动计算小数列总和的函数,以下是我在main.sh脚本中调用该函数的函数
demo()
{
FILE_NAME="$1"
COLUMN_NAME="$2"
alpha=( $(awk -F"|" 'NR==1{for(i=1;i<=NF;i++){if ($i ~ /'$COLUMN_NAME'/){print i;}}}' $FILE_NAME) )
for each in "${alpha[@]}"
do
awk -F'"?\\|"?' '{T+=$('$each')} END { printf "%.2f\n", T }' $FILE_NAME
done
}
脚本:main.sh
#main.sh脚本中调用的功能
demo demo.txt 'SAL|COL|PER|TAG'
问题是我如何将输出放入数组
以下是我需要存储到array1中的输出
3.57 40.68 6.52 6.88
第二个数组是从另一个程序获取的下面的输出
array2={3.57 40.68 6.52 6.88}
**以便我可以将array1与array 2的位置值进行匹配
array1[0] with array2[0]
array1[1] with array2[1]
array1[2] with array2[2]
array1[3] with array2[3]
如果所有成功都应将成功状态显示为“是”
我有部分起作用的解决方案...帮助我提供一些解决方案, 以便我可以将数组的每个值存储到array1
FILE_NAME="$1"
COLUMN_NAME="$2"
alpha=( $(awk -F"|" 'NR==1{for(i=1;i<=NF;i++){if ($i ~ /'$COLUMN_NAME'/){print i;}}}' $FILE_NAME) )
declare -a array=();
for each in "${alpha[@]}"
do
#var=($(awk -F'"?\\|"?' '{T+=$('$each')} END { printf "%.2f\n", T }' $FILE_NAME))
mapfile -t array <<< "$(awk -F'"?\\|"?' '{T+=$('$each')} END { printf "%.2f\n", T }' $FILE_NAME)"
#awk -F'"?\\|"?' '{T+=$('$each')} END { printf "%.2f\n", T }' $FILE_NAME
done
echo "${array[@]}"
部分工作解决方案的问题是,每次将一列总和中的单个值存储到整个数组中,这将删除先前的值。
解决方案是将值一个接一个地填充到数组中,而不是使用mapfile命令,该命令要求所有值都在一个输入行上:
FILE_NAME="$1"
COLUMN_NAME="$2"
alpha=( $(awk -F"|" 'NR==1{for(i=1;i<=NF;i++){if ($i ~ /'$COLUMN_NAME'/){print i;}}}' $FILE_NAME) )
declare -a array=()
n=0
for each in "${alpha[@]}"
do
array[n]="$(awk -F'"?\\|"?' '{T+=$('$each')} END { printf "%.2f\n", T }' $FILE_NAME)"
((n=n+1))
done
echo "${array[@]}"
运行此命令可获得:
$ bash test.sh demo.txt 'SAL|COL|PER|TAG'
3.58 40.68 6.52 6.88
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句