我试图逐行读取文件,并且每次迭代检查第五个数组元素,它将是+或 - (加号或减号)字符。我能够逐行读取文件,但不能让if / else语句识别+/-。
我写过的Bash代码
#!/bin/bash
# save the field separator
old_IFS=$IFS
while IFS=$'\t' read -r -a myArray
do
echo "${myArray[5]}"
if [ $myArray[5] = "+" ]; then
echo plus
elif [ $myArray[5] = "-" ]; then
echo minus
else
echo no
fi
done < /Users/Alex/Desktop/test.bed
# restore default field separator
IFS=$old_IFS
示例输入
Scaffold1 34 39 name . -
Scaffold1 12 17 name . -
Scaffold1 17 12 name . +
Scaffold1 43 49 name . +
Scaffold1 45 48 name . -
示例输出
-
no
-
no
+
no
+
no
-
no
在每个+/-下,它应该是加号或减号,而是表示否,表示条件语句失败。一旦输出正确,我将改变echo命令,根据符号对第2列或第3列进行算术运算。
答案 0 :(得分:5)
你需要:
${myArray[5]}
不
$myArray[5] # this is equivalent to "${myArray[0]}[5]"
顺便说一句,请考虑使用case
语句:
case ${myArray[5]} in
-) echo minus ;;
+) echo plus ;;
*) echo no ;;
esac
您还可以避免使用数组 - 从而使您的代码与POSIX sh兼容 - 为每列使用read
的命名参数:
while IFS=$'\t' read -r scaffold num1 num2 name dot col _; do
: "$col" refers to your fifth column here
done