2016-03-24 7 views
0

: Ich bin in Unix und muß folgende tun: Ich habe 10 Dateien mit dem Namen:Unix ersetzen dynamische Dateinamen mit dynamischen Streichern

t1_20160322_load_8977854_49843489_1.xml 
t1_20160322_load_8977855_47536364_1.xml 
t1_20160322_load_8977856_93435735_1.xml 
t1_20160322_load_8977857_78637575_1.xml 
t1_20160322_load_8977858_97437542_1.xml 
.... 

und ich erhielt man eine Datei (loadnumber.txt) mit folgendem Inhalt :

8977854;EUROLOADSAMPLE;c 
8977855;ASIENLOADSAMPLE;i 
8977856;AFRICANLOADSAMPLE;s 
8977857;USALOADSAMPLE;l 
8977858;CANADALOADSAMPLE;o 

ich brauche die Nummer mit dem Wert aus der Textdatei, zum Beispiel ersetzen sollte die Datei t1_20160322_load_8977854_49843489_1.xml zu

geändert werden

und die Datei t1_20160322_load_8977854_49843489_1.xml sollte t1_ASIENLOADSAMPLE_i.xml

geändert werden Ich habe versucht, googeln, wie das Unix-Kommando zu schreiben, aber ich glaube, ich das Grundwissen fehle, so schrieb ich folgende:

for f in $(t1*xml);do;for x in $(cat contracts_generator.txt);do;g=$(echo $x | cut -d\; -f1); n=$(echo $x | cut -d\; -f2); m=$(echo $x | cut -d\; -f3);mv $f t1_$n.xml;done;done 

Das hat natürlich nicht funktioniert. Kannst du mir bitte helfen herauszufinden, wie ich den Code schreiben soll?

Vielen Dank für Ihre Antworten im Voraus.

Antwort

0

Wenn Sie etwas verstehen möchten, sollten Sie ein Shell-Skript erstellen, um Ihr Problem zu behandeln. Erstellen Sie eine Datei namens myscript.sh mit Ihrem Inhalt.

Ihre wo nicht zu weit, so fixiert ich es so:

for f in $(ls t1*xml) 
    do 
     #echo $f 
     mymatch=$(echo $f |cut -d"_" -f4) 
     #echo $mymatch 

     for x in $(cat contracts_generator.txt) 
     do 
      g=$(echo $x | cut -d\; -f1) 
      if [[ "$g" == "$mymatch" ]] 
      then 
      n=$(echo $x | cut -d\; -f2) 
      m=$(echo $x | cut -d\; -f3) 
      fi 
     done 
     mv ${f} t1_${n}_${m}.xml 
    done 

(# vor dem echo für Debug entfernen)

Dann so Ihr Skript aufrufen:

sh myscript.sh