Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从数组中获取数据并应用if条件_Arrays_Bash_If Statement - Fatal编程技术网

Arrays 从数组中获取数据并应用if条件

Arrays 从数组中获取数据并应用if条件,arrays,bash,if-statement,Arrays,Bash,If Statement,当我从csv文件读取数据并存储在数组中时,我被困在这里 现在我想根据条件显示数据 file_csv="ports.csv" index=0 while IFS= read -r line;do array["$index"]="$line" index=$(($index + 1)); done < $file_csv for lines in "${array[@]}" do #echo $(awk '/down/ {print}' |

当我从csv文件读取数据并存储在数组中时,我被困在这里 现在我想根据条件显示数据

file_csv="ports.csv"
index=0
while IFS= read -r line;do
        array["$index"]="$line"
        index=$(($index + 1));
done < $file_csv

for lines in "${array[@]}"
do
        #echo $(awk '/down/ {print}' | sed -n 's/HUAWEI//' <<< $index )
        if [[ ${array[@]}=="down"  ]]; then
                echo  "found $index" | sed 's/Huawei/d/'
        fi

done

a=$(awk '/down/ {print}' $file_csv)

要高效地将csv加载到阵列,请执行以下操作:

 mapfile array < "$file_csv"
(使用您已有的
awk
,只需将另一组参数包装在其周围,即可生成
a
数组。)

您编写的循环以几种方式中断:

for lines in "${array[@]}"           # iteratively assigns each element to $lines
do  if [[ ${array[@]}=="down"  ]]    # [1] tests "down" against the unquoted entire set
    then echo  "found $index" |      # [2] $index unset
           sed 's/Huawei/d/'         # Huawei not in "found $index"
    fi
done
1:if不太可能工作,并且可能会在语法上破坏您的程序,因为数组的整个未引用内容将显示为与“down”进行比较,而“down”可能不是您期望整个数组包含的内容

2:“$index”根本没有设置

也许这更接近你想要的?这会过滤掉华为的记录

array=( $( awk '/down/ && !/Huawei/ {print}' "$file_csv" ) )
如果你想让它不区分大小写-

array=( $( awk 'BEGIN{ IGNORECASE = 1 }; /down/ && !/Huawei/ {print}' "$file_csv" ) )
您是否在代码的后面部分使用数组来做其他事情? 因为如果没有,最好跳过数组,只使用
awk


您能详细说明一下吗?

输入文件(ports.csv)的内容是什么?过滤条件是什么?
array=( $( awk '/down/ && !/Huawei/ {print}' "$file_csv" ) )
array=( $( awk 'BEGIN{ IGNORECASE = 1 }; /down/ && !/Huawei/ {print}' "$file_csv" ) )