【问题标题】:unix replace dynamic filenames with dynamic stringsunix 用动态字符串替换动态文件名
【发布时间】:2016-03-24 13:20:42
【问题描述】:

我是 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

这当然行不通。你能帮我弄清楚,我应该怎么写代码?

非常感谢您提前回答。

【问题讨论】:

    标签: xml unix filenames


    【解决方案1】:

    如果你想了解一些东西,你应该创建一个 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
    

    【讨论】:

      猜你喜欢
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多