2017-02-16 97 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