2017-02-16 6 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 соответственно. Он сохраняет все значения рядом друг с другом в одной строке без TAB в массиве MY_ARRAY.

Любая помощь?

ответ

0

Да, это происходит из-за неправильной команды $MY_ARRAY > MY_FILE.txt.

Вам необходимо напечатать массив в файле.

И для того, чтобы напечатать его правильно нужно либо использовать
echo -e "${MY_ARRAY[@]}" >file или printf

человеком эхо

echo -e : enable interpretation of backslash escapes 

Кроме того, если вам нужно хранить $ ENTRY в массиве вам нужно для этого:

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

Большое спасибо Георгиос. Проблема решена, файл создан! – elpavlos

+0

Еще один вопрос. В некоторых случаях некоторые из переменных не существуют. Скажем, для третьей итерации $ db_orig не имеет значения. Можно ли создать третью строку в файле ($ d, $ tf, $ id) и иметь NA или просто пустое поле в этом конкретном поле $ db_orig? В моем сценарии для таких случаев вообще нет записи. – elpavlos