2017-10-19 128 views
0

我有一个命令,当我运行它时,它输出一个表,看起来像;Bash追加到数组元素的末尾

Id  Name         File         OS   Version Annotation 
10  MICKEY  [MICKEY_01_001] MICKEY/MICKEY.vmx  windows8Server64Guest vmx-08  
13  DONALD  [DONALD_01_001] DONALD/DONALD.vmx  windows7Server64Guest vmx-10 
2  GOOFY  [GOOFY_01_001] GOOFY/GOOFY.vmx  windows9Server64Guest vmx-09 

我那么表存储在数组中调用表并列出表数组,代码如下所示;

readarray -t TABLE <<< "$(command)" 
IFS='|' 
for i in "${TABLE[@]}" 
do 
    echo $I 
done 

如何附加到每个数组元素的末尾?我想要表格如下所示;

Id  Name         File         OS   Version Annotation  
10  MICKEY  [MICKEY_01_001] MICKEY/MICKEY.vmx  windows8Server64Guest vmx-08  ON  
13  DONALD  [DONALD_01_001] DONALD/DONALD.vmx  windows7Server64Guest vmx-10. OFF  
2  GOOFY  [GOOFY_01_001] GOOFY/GOOFY.vmx  windows9Server64Guest vmx-09. ON 
+0

中,我相信有,你可以检查一些存在的问题。例如:https://stackoverflow.com/questions/12744031/how-to-change-values-of-bash-array-elements-without-loop – dbalakirev

+0

ON,OFF,ON从哪里来? –

回答

0

如果要追加开启或关闭您的阵列

readarray -t TABLE <<< "$(command)" 
#IFS='|' why ? 
for ((i=1;i<"${#TABLE[@]}";i++)) 
# start i=1 to preserve header 
do 
    # condition to ON or OFF 
    [ "${a:=OFF}" = 'ON' ] &&a='OFF'||a='ON' 
    TABLE["$i"]="${TABLE["$i"]} $a" 
done 
for i in "${TABLE[@]}" 
do 
    echo "$i" 
done 
+0

谢谢你的建议。你的建议没有像我希望的那样工作,它在数组元素的开头追加了ON或OFF,并覆盖了ID字段。我试图在数组元素字符串的末尾附加ON或OFF。任何建议,我可以做到这一点? – user3289583

+0

我不明白。在家中,我用“$(cat infile)”替换“$(command)”,ON和OFF在每个数组元素的末尾处出现,并且不覆盖ID字段。 –

+0

感谢您的帮助和建议,我认为这一定是我的环境。你的解决方案是最符合我的要求的。再次感谢。 – user3289583

0

指令"$(command)"做什么?我们应该假设,输出的一行=一个字符串=数组的一个元素?如果是这样,那么这应该为你工作:

readarray -t TABLE <<< "$(command)" 
IFS='|' 
for i in "${TABLE[@]}" 
do 
    if <condition_for_on_met>; then 
    echo "$i ON" 
    elif <condition_for_off_met>;then 
    echo "$i OFF" 
    else 
    echo "$i" 
    fi 
done 

但是,这是一个普遍的答案。您可以通过向我们展示您的输入是什么以及它在打印之前如何处理来改善您的问题。

相关问题