2016-03-24 104 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應改爲

t1_EUROLOADSAMPLE_c.xml 

和文件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

如果你想了解一些東西,你應該創建一個shell腳本來處理你的問題。用您的內容創建一個名爲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