unix用动态字符串

时间:2016-03-24 13:20:43

标签: xml unix filenames

我是unix的新手,需要做以下事情: 我有10个文件名:

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

这当然没有用。你能帮我弄清楚,我该怎么写代码?

非常感谢你提前给出答案。

1 个答案:

答案 0 :(得分: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