2016-10-19 3 views
-1

Ich habe die follwoing bash Code iÜberschreiben in dat Dateien

declare -A matrix 
num_rows=6 
num_columns=1 
for ((i=1;i<=num_rows;i++)) do 
for ((j=1;j<=num_columns;j++)) do 
if [[ i -eq 1 ]]; then 
matrix[$i,$j]= echo $i 
else 
matrix[$i,$j]= echo $j 
fi 
done 
done >> out.dat 

Dieser Code leitet die Ausgänge an dat Datei aber das Problem, wenn ich den Code erneut ausführen, werden die alten Ausgaben entfernt und durch die neuen Ausgaben ersetzt , Wie kann ich die alten Ausgänge behalten und auch die neuen speichern?

Antwort

1
> "out.dat" 

schneidet die Datei auf Null ab, wobei im Wesentlichen alle Inhalte entfernt werden.

Wenn Sie die vorherige alte Datei erhalten möchten, können Sie es bewegen:

mv out.dat out.dat.old 
> "out.dat" 

Wenn Sie alle alten Dateien erhalten möchten, können Sie sie mit einem einigermaßen eindeutige Namen wie mit dem date Befehl speichern :

mv out.dat out.dat.old.$(date +%s%2N) 
> "out.dat" 

Das Abschneiden kann oder auch nicht notwendig sein, je nachdem, ob Ihre restlichen Code eine leere erwartet oder erstellt, wenn sie noch nicht existiert.

+1

Und wenn Sie an dieselbe Datei anhängen möchten, ohne ein Backup zu erstellen, können Sie stattdessen '>> out.dat' verwenden. '>>' wird angehängt, anstatt abgeschnitten und geschrieben zu werden. – Munir

+0

Genau, mein Code ist wie folgt – Rock

+0

Danke für Ihre Notizen, ich habe das Code-Segment zu meiner Frage hinzugefügt. Ich habe versucht, 'mv' Befehl einzubeziehen, aber es funktioniert nicht gut – Rock

Verwandte Themen