2016-06-17 13 views
-1

Ich habe 30 Dateien (ascii), die ich zu binary.Linux Befehlszeile umwandeln möchten (Fortran 77 CODE), dieWie schreibe ich ein Shell-Skript, um die Dateikonvertierung zu automatisieren?

./rec_binary 

Relevante Teil des Codes

 character*72 ifname,ofname 
c 
     write(*, fmt="(/'Enter input file name')") 
     read(5,85) ifname 
85 format(a72) 
     write(*, fmt="(/'Enter output file name')") 
     read(5,85) ofname 

Dann Code kompiliert wurde fragt nach Namen Eingabe- und Ausgabedatei

Enter input file name 
rec01.txt 

Enter output file name 
rec.01 

Wie dies zu automatisieren? ich mag dieses

versucht haben,
#!/bin/csh -f 
set list = 'ls rec*.txt' 
foreach file ($list) 
rec_binary ${file} > 

Oder

#!/bin/sh 
for f in .txt 
do 
./rec_binary F 
done 

Aber ich habe keine Ahnung, für den nächsten step.Text Dateien

rec01.txt 
rec02.txt 

rec30.txt 

Ausgabedateien

rec.01 
rec.02 

rec.30 
+0

Hat 'bash'' foreach'? – sjsam

+0

@sjsam Ich weiß nicht, was sollte ich stattdessen für die Schleife setzen? –

+0

'für Sachen in $ viel 'ist der übliche Weg. Aber Sie sollten 'ls' nicht ausgeben, wie in [\ [this \]] (http://mywiki.wooledge.org/ParsingLs) beschrieben. Link – sjsam

Antwort

2

Try this:

#!/bin/bash 
for each in `ls rec*.txt` 
do 
    op_file=$(echo $each | sed 's/\(rec\)\([0-9]*\).txt/\1\.\2/') 
    ./rec_binary <<EOF 
$each 
$op_file 
EOF 
done 

Die Variable op_file konvertiert Ihre rec01.txt rec.01.

+0

NoIch habe das: ad.sh: Befehlsersetzung: Zeile 3: unerwartete EOF bei der Suche nach passenden '' ' ad.sh: Befehlsersetzung: Zeile 4: Syntaxfehler: unerwartetes Ende der Datei –

+0

Versuchen Sie das bearbeitete Skript – Fazlin

+0

Das selbe habe ich schon geändert. –

1

Unter der Annahme sind, haben Sie Kenntnis von rec_binary . Ich bin mir nicht sicher, was es macht. Ich mache das anhand Ihrer fraglichen Eingaben.

for i in rec*.txt; 
do 
    rec_binary "$i" 
done 
+0

Nicht funktionierend, wenn ich rec_binary ausfühle, habe ich Frage eingegeben Eingabedateiname –

+0

Dies sollte die beste Option sein, vorausgesetzt, das OP könnte die Eingabeaufforderung mit 'rec_binary' unterdrücken – sjsam

+0

Wir müssen mehr über rec_binary wissen –

0

Es gibt eine Reihe von verschiedenen Möglichkeiten, dies zu tun. Eine Möglichkeit wäre die Verwendung einer for-Schleife. Es ist jedoch unklar, ob der von Ihnen angezeigte Befehl rec_binary Argumente zulässt.

for i in rec*.txt; do 
    num=$(echo $i | egrep -o "\d+") 
    echo ${i} > "rec.${num}" 
done 

Wenn Sie so etwas wie dies von der Kommandozeile ./rec_binary file1 file2 tun können, arbeitet das soll dann. Wenn die rec_binary Befehl echos dann nach stdout könnte man es in eine Datei senden:

for i in rec*.txt; do 
    num=$(echo $i | egrep -o "\d+") 
    rec_binary ${i} > "rec.${num}" 
done 

Die $num Variable einfach die Ziffern aus dem Dateinamen erfasst, wie es Loops und dann können wir es verwenden, während der nächste Befehl ausgeführt wird das konstruieren Dateiname.