BASH:不能在while循环中使用变量awk

时间:2014-12-03 11:28:50

标签: bash awk

在尝试在while循环中唤醒READ输入时遇到问题。

这是我的代码:

#!/bin/bash

read -p "Please enter the Array LUN ID (ALU) you wish to query, separated by a comma (e.g. 2036,2037,2045): " ARRAY_LUNS
LUN_NUMBER=`echo $ARRAY_LUNS | awk -F "," '{ for (i=1; i<NF; i++) printf $i"\n" ; print $NF }' | wc -w`
echo "you entered $LUN_NUMBER LUN's"

s=0
while [ $s -lt $LUN_NUMBER ];
do
        s=$[$s+1]
        LUN_ID=`echo $ARRAY_LUNS | awk -F, '{print $'$s'}' | awk -v n1="$s" 'NR==n1'`
        echo "NR $s :"
        echo "awk -v n1="$s" 'NR==n1'$LUN_ID"
done

无论我尝试使用awk的哪些选项,我都不会让它显示比逗号之前的第一个条目更多。它在我看来,就像循环有一些问题,以使变量s向上计数。但另一方面,代码行:

LUN_ID=`echo $ARRAY_LUNS | awk -F, '{print $'$s'}' | awk -v n1="$s" 'NR==n1'`

效果很好!关于如何解决这个问题的任何想法。我的READ输入的另一个解决方案也很好。

1 个答案:

答案 0 :(得分:0)

#!/bin/bash

typeset -a ARRAY_LUNS
IFS=, read -a -p "Please enter the Array LUN ID (ALU) you wish to query, separated by a comma (e.g. 2036,2037,2045): " ARRAY_LUNS
LUN_NUMBER="${#ARRAY_LUNS[@]}"
echo "you entered $LUN_NUMBER LUNs"

for((s=0;s<LUN_NUMBER;s++))
do
     echo "LUN id $s: ${ARRAY_LUNS[s]}"
done

为什么awk代码不起作用?

问题不在于反击。我说The last awk command in the pipe

awk -v n1="$s" 'NR==n1'

awk代码尝试在s为1时打印第一行,在s为2时打印第二行,在s为3时打印第三行,以及依旧......但 echo $ARRAY_LUNS 打印了多少行?只需 ONE ...没有第二行,没有第三行......只有 一行 而且只是 打印一行

该行包含 ONE LINE 中的所有LUN_IDs,即另一个LUN_ID旁边的一个LUN_ID,如下所示:

34 45 21 223

这样

34
45
21
223

这些LUN_IDs 字段 可由awk使用$1$2$3打印,......等等 因此,如果您希望代码运行正常 删除管道中的最后一个命令

LUN_ID=$(echo "$ARRAY_LUNS" | awk -F, '{print $'$s'}')

对于任何进一步的问题,请先阅读此awk guide