我是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
这当然没有用。你能帮我弄清楚,我该怎么写代码?
非常感谢你提前给出答案。
答案 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