2017-02-16 2 views
1

Ich versuche, das Variablen $ d, $ tf_name, $ db_orig in der folgenden Schleife will eine file.I erstellt speichern mit einer Lasche am Ende getrennt Meine_Datei.txt die enthalten Die folgenden Felder $ d, $ tf_name, $ db_orig und jede Iteration dieses Variablensatzes werden in einer neuen Zeile in der Datei MY_FILE.txt gespeichert.Wie Variablen von der Schleife zum Speichern in eine Datei

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 

Es erkennt nicht \ t und \ n als TAB bzw. NEWLINE. Es speichert alle Werte nebeneinander in derselben Zeile ohne TAB im Array MY_ARRAY.

Irgendwelche Hilfe?

Antwort

0

Ja, dies geschieht, weil $MY_ARRAY > MY_FILE.txt kein gültiger Befehl ist.

Sie benötigen Array in die Datei zu drucken.

Und um es richtig zu drucken, benötigen Sie entweder
echo -e "${MY_ARRAY[@]}" >file oder printf

von Mann zu verwenden

echo -e : enable interpretation of backslash escapes 

Außerdem Echo, wenn Sie die $ ENTRY auf Ihre Array speichern müssen Sie brauchen Um es so zu tun:

MY_ARRAY+=("$ENTRY") 

In jedem Fall können Sie es ohne die Notwendigkeit eines tun Array. Sie können einfach + = in der ENTRY gelten: ENTRY+="$d\t$tf\t$id\t$db_orig\n"

Test:

$ 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 wieder aktualisiert. Sie können die Verwendung des Arrays vermeiden, wenn Sie möchten. –

+0

Vielen Dank Georgios. Problem gelöst, Datei erstellt! – elpavlos

+0

Eine andere Frage ist gerade aufgetaucht. In einigen Fällen existieren einige der Variablen nicht. Nehmen wir an, für die dritte Iteration hat $ db_orig keinen Wert. Wäre es möglich, die dritte Zeile in der Datei ($ d, $ tf, $ id) zu erstellen und NA oder nur leer in diesem spezifischen Feld $ db_orig zu haben? In meinem Skript gibt es für solche Fälle überhaupt keinen Eintrag. – elpavlos

Verwandte Themen