2017-02-16 106 views
1

我試圖將在下面的循環中創建的變量$ d,$ tf_name,$ db_orig存儲到一個文件中。我想以一個分隔開的標籤MY_FILE.txt包含以下字段$ d,$ tf_name,$ db_orig和這組變量的每次迭代都將存儲在文件MY_FILE.txt的新行中。如何將變量從循環存儲到文件

MY_ARRAY=() 
for d in */ 
    do 

    IN=$d 
    folderIN=(${IN//_/ }) 
    tf_name=${folderIN[-1]%/*} 
    db_orig=${folderIN[-2]%/*}; 

ENTRY="$d\t$tf\t$id\t$db_orig\n" 
MY_ARRAY+=$ENTRY 

done 

$MY_ARRAY > MY_FILE.txt 

它不會分別識別\ t和\ n作爲TAB和NEWLINE。它在MY_ARRAY數組中將所有值彼此相鄰存儲在不帶TAB的同一行中。

任何幫助?

回答

0

是的,這是因爲$MY_ARRAY > MY_FILE.txt不是有效的命令。

您需要將陣列打印到文件中。

而且爲了正確地打印您需要或者使用
echo -e "${MY_ARRAY[@]}" >fileprintf

由人呼應

echo -e : enable interpretation of backslash escapes 

而且,如果你需要存儲$進入你的數組,你需要這樣做:

MY_ARRAY+=("$ENTRY") 

在任何情況下,你可以做到這一點,而不需要陣列。你可以只申請+ =在入門:ENTRY+="$d\t$tf\t$id\t$db_orig\n"

測試:

$ e+="a\tb\tc\td\n" 
$ e+="aa\tbb\tcc\tdd\n" 
$ e+="aaa\tbbb\tccc\tddd\n" 
$ echo -e "$e" 
a  b  c  d 
aa  bb  cc  dd 
aaa  bbb  ccc  ddd 

# Test with array 
$ e="a\tb\tc\td\n" && myar+=("$e") 
$ e="aa\tbb\tcc\tdd\n" && myar+=("$e") 
$ e="aaa\tbbb\tccc\tddd\n" && myar+=("$e") 
$ echo -e "${myar[@]}" 
a  b  c  d 
aa  bb  cc  dd 
aaa bbb  ccc  ddd 

#Alternative array printing 
$ for i in "${myar[@]}";do echo -en "$i";done 
a  b  c  d 
aa  bb  cc  dd 
+0

@elpavlos再次更新。如果你願意,你可以避免使用數組。 –

+0

非常感謝Georgios。問題解決了,文件已創建! – elpavlos

+0

另一個問題剛剛出現。在某些情況下,某些變量不存在。假設第三次迭代$ db_orig沒有值。是否可以在文件($ d,$ tf,$ id)中創建第三行,並在此特定字段$ db_orig處具有NA或僅空白?在我的腳本中根本沒有條目。 – elpavlos