免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: w1525
打印 上一主题 下一主题

还是一个老问题,但是碰到了新麻烦,求解!!! [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-12-21 22:12 |只看该作者
感谢楼上的各位的答复,此问题的重点还是在于数据量巨大,过百万的文件如果不能循环处理的,那肯定是挂。

首先我之前的回复贴出了我现在的处理方法和说明,直接ls定向的结果就是必须将文件名精确到好几位,即不能直接直接ls *.unl.Load.err,哪怕再加上个文件名都不行,必须精确到年月日这一位,十几个不同的文件名对应了4个月的时间,意味着我要疯狂。

我又想了个笨办法,我先将文件名和日期用输出到两个不同的unl文件里,然后在shell中加入查找,如匹配条件则输出mv的shell,这样大概可以,不过今天没过去处理这事,不知道这样做会不会跑死,请各位大侠评估下,如下是改动后的shell;
date.unl的类型就是按照文件的名字规则用excul导出的一列年月日20091201,20091202。。。。,filename.unl里定义的是按照实际要修改的文件名的前面部分aaaa,bbbb,cccc。。。。。

src_dir=/export/system/wk/test  
dest_dir=
a=`cat date.unl`
b=`cat filename.unl`
cd $src_dir
echo "begin   at `date \"+%Y/%m/%d %H:%M:%S\"`." > $src_dir/mv.log
for A in $a
do
for B  in $b
do

ls ${B}${A}*.unl.Load.err|awk -F'.Load.err' '{print "mv "$0" "$1".unl"}'

>$src_dir/mv.sh
chmod +x mv.sh
cat mv.sh>>$src_dir/mv.log
mv.sh>>$src_dir/mv.log
done
done
echo "end   at `date \"+%Y/%m/%d %H:%M:%S\"`." >> $src_dir/mv.log

[ 本帖最后由 w1525 于 2009-12-21 22:17 编辑 ]

论坛徽章:
0
22 [报告]
发表于 2009-12-21 22:23 |只看该作者
mv.sh用来干啥的。。

论坛徽章:
0
23 [报告]
发表于 2009-12-21 22:33 |只看该作者
ls > tmp
while read file;do rename 's/\.Load\.err$//' $file;done <tmp

论坛徽章:
0
24 [报告]
发表于 2009-12-21 22:35 |只看该作者
原帖由 ghp268 于 2009-12-21 22:23 发表
mv.sh用来干啥的。。


通过ls得出的数据输出到mv.sh,mv.sh的内容为:
mv aaaa.unl.Load.err aaaa.unl
mv bbbb.unl.Load.err bbbb.unl
mv .............
mv .............

论坛徽章:
0
25 [报告]
发表于 2009-12-21 22:37 |只看该作者
原帖由 wqfhenanxc 于 2009-12-21 18:10 发表
#!/bin/sh
src_dir=/export/system/bak200912/bak_err
dest_dir=/export/system
cd $src_dir
for i in ./*
if [[ ${i#*/} == *.Load.err ]]
then
mv $i $dest_dir"/"${i%*".Load.err"}
fi
done



用if [[ ${i#*/} == *.Load.err ]]不可以的,还是因为数据量巨大的问题,报错为“`if' is not expected.”

论坛徽章:
0
26 [报告]
发表于 2009-12-22 08:43 |只看该作者
原帖由 w1525 于 2009-12-21 22:37 发表



用if [[ ${i#*/} == *.Load.err ]]不可以的,还是因为数据量巨大的问题,报错为“`if' is not expected.”


不好意思,我在if语句上面一行少打了个do,你加上应该就可以了。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
27 [报告]
发表于 2009-12-22 13:15 |只看该作者
我的那种方法应该是可以的,当然,慢是避免不了的.
用C语言写一个会快一些

论坛徽章:
0
28 [报告]
发表于 2009-12-23 23:12 |只看该作者

回复 #1 w1525 的帖子

哥们儿,shell也是有一定适用范围的。
毕竟是脚本嘛。。这种极端case 并不一定合适。
这么深究下去意义不大。
有这个时间写个C程序早搞定了。

论坛徽章:
0
29 [报告]
发表于 2009-12-24 10:25 |只看该作者
对于数据量大的文件,楼上已经给出的find + rename个人认为是最完美的解释。
用C写东西是自找苦吃
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP