Arrays 从数组中获取数据并应用if条件
当我从csv文件读取数据并存储在数组中时,我被困在这里 现在我想根据条件显示数据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}' |
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" ) )