2014-03-04 35 views
2

我有一个变量,如下所示&我执行某些操作来逐个打印输出,如下所述。根据新行字符将命令输出行存储到数组中

a="My name is A. Her Name is B. His Name is C" 
echo "$a" | awk -F '[nN]ame |\\.' '{for (i=2; i<=NF; i+=2) print $i}' 

输出是

is A 
is B 
is C 

当我的结果存储到一个数组,则认为空间阵列分离器和存储的值。但我想输出到每个数组索引值的每一行存储如下

x=($(awk -F '[nN]ame |\\.' '{for (i=2; i<=NF; i+=2) print $i}' <<< "$a")) 

出放,

${x[0]} = is 
${x[1]} = A 
..and so on... 

我期望是

${x[0]} = is A 
${x[1]} = is B 
${x[2]} = is C 

还有echo ${#x[@]} = 6;它应该是= 3

回答

2
OK try below: 

i=0 
while read v; do 
    x[i]="$v" 
    ((i++)) 
done < <(awk -F '[nN]ame |\\.' '{for (i=2; i<=NF; i+=2) print $i}' <<< "$a") 
+0

但它返回完整的数据'回声$ {X [0]}'='是A是B是C' – logan

+0

我期望'$ {x [0]} =是A $ {x [1]} =是B $ {x [2]} =是C' – logan

+0

+1;超级回答 – logan

2

也可以使用映射文件命令(bash的版本4或更高):

tempX=$(awk -F '[nN]ame |\\.' '{for (i=2; i<=NF; i+=2) print $i}' <<< "$a") 
mapfile -t x <<< "$tempX" 

~$ echo "${x[0]}" 
is A 
+0

但是它返回完整的数据'echo $ {x [0]}'='是A是B是C' – logan

+0

将echo的参数换成引号echo“$ {x [0]}” –

+0

现在返回一个接一个...我想只在第一个阵列的第一行..(请参阅我的问题)'$ echo“$ {x [0]}” 是A 是B 是C [' – logan

相关问题