2017-10-19 129 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 

但是,這是一個普遍的答案。您可以通過向我們展示您的輸入是什麼以及它在打印之前如何處理來改善您的問題。