ubuntuusers.de

temporäre Dateien vermeiden

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

ingobulla

Anmeldungsdatum:
27. April 2009

Beiträge: 32

Hallo,

ich habe ein Shell-Skript, dass wie folgt anfängt:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
input_filename=$1
output_filename=$2
first_temp_filename=temp_1.gff
second_temp_filename=temp_2.gff
third_temp_filename=temp_3.gff
four_temp_filename=temp_4.gff

# remove comments
cat $input_filename | perl -ne 'if (m/\tAUGUSTUS\t/) { print $_; }' > $first_temp_filename

# adapt columns 'type' and 'attribute'
augustus2gbrowse.pl < $first_temp_filename > $second_temp_filename
gbrowseold2gff3.pl < $second_temp_filename > $third_temp_filename

Die Verwendung der temporären Dateien erscheint mir unelegant und unsicher. Daher die Frage: Wie kann man das besser lösen?

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

Die Verwendung der temporären Dateien erscheint mir unelegant

Uh, allerdings:

grep $'\tAUGUSTUS\t' "$1" | augustus2gbrowse.pl | gbrowseold2gff3.pl > "$2"

(ungestet, aber so ähnlich würde es aussehen, wobei ich stark vermuten würde, das könnte man auch alles gleich in einem Perl script machen…)

Davon abgesehen legt man temporäre Dateien mit 'mktemp' an (und löscht sie auch wieder)

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13204

Kinch schrieb:

Die Verwendung der temporären Dateien erscheint mir unelegant

Uh, allerdings:

+1 😉

grep $'\tAUGUSTUS\t' "$1" | augustus2gbrowse.pl | gbrowseold2gff3.pl > "$2"

Was willst Du mit dem ersten Dollar da in der Kommandozeile des grep erreichen?

(ungestet, aber so ähnlich würde es aussehen, wobei ich stark vermuten würde, das könnte man auch alles gleich in einem Perl script machen…)

+0.5 Ich würde natürlich Ruby nehmen. 😉 Aber alles in einem Skript erledigen klingt auf jeden Fall sehr sinnvoll.

Ciao

robert

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

rklm schrieb:

Was willst Du mit dem ersten Dollar da in der Kommandozeile des grep erreichen?

Shell magie^^

echo -e "\tbar\t" > foo
cat foo
	bar	
grep '\tbar\t' foo    # kein treffer
grep $'\tbar\t' foo
	bar	

Das $'...' ist das Äquivalent zum -e in echo, und interpoliert \t, \n und co zum eigentlichen Zeichen.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13204

Kinch schrieb:

rklm schrieb:

Was willst Du mit dem ersten Dollar da in der Kommandozeile des grep erreichen?

Shell magie^^

Aha!

       Words of the form $'string' are treated specially.  The word expands to string, with backslash-
       escaped  characters  replaced as specified by the ANSI C standard.  Backslash escape sequences,
       if present, are decoded as follows:

Das $'...' ist das Äquivalent zum -e in echo, und interpoliert \t, \n und co zum eigentlichen Zeichen.

Cool! Wieder was gelernt. Merci für die Aufklärung.

Ciao

robert

Antworten |