2016-03-24 6 views
0

私はUNIXで新しいですし、以下のことを行う必要があるとの動的なファイル名を置き換える: 私は名前を持つ10件のファイルがあります。UNIXは、動的な文字列

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 
.... 

を、私は次の内容の一つのファイル(loadnumber.txt)を受け:

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

私は、ファイルt1_20160322_load_8977854_49843489_1.xmlが

に変更する必要があります例えば、テキストファイルからの値で番号を交換する必要があります210

とファイルt1_20160322_load_8977854_49843489_1.xmlがt1_ASIENLOADSAMPLE_i.xml

に変更する必要がありますが、私はUnixのコマンドーの書き方をグーグルしてみましたが、私は基本的な知識が不足していますだと思うので、私は以下のことを書いた:

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 

これはもちろん動作しませんでした。あなたは私がコードを書くべき方法を理解するのを助けてくれますか?

ご回答いただきありがとうございます。

答えて

0

何かを理解したい場合は、問題を処理するシェルスクリプトを作成する必要があります。あなたのコンテンツでmyscript.shというファイルを作成します。

あなたのそれほど遠くないので、私はそれを修正:

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 

(デバッグ用echo#を削除)

そして、そう、あなたのスクリプトを呼び出す:

sh myscript.sh