2017-02-16 10 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 : enable interpretation of backslash escapes 

をエコー人によって
echo -e "${MY_ARRAY[@]}" >fileまたはprintf

を使用するか必要がありますこのようにするには:

MY_ARRAY+=("$ENTRY") 

いずれの場合でも、次のようにすることができます。アレイ。あなただけの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

別の質問が出てきました。場合によっては、変数の一部が存在しない場合があります。 3回目の反復$ db_origに値がないとしましょう。ファイル($ d、$ tf、$ id)に3行目を作成し、この特定のフィールド$ db_origにNAまたは空白を含めることは可能でしょうか?私のスクリプトでは、そのような場合には全くエントリがありません。 – elpavlos

関連する問題