免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 6362 | 回复: 22
打印 上一主题 下一主题

怎样把文件序列a1,a2,a3...a11,a12...a1000改成a0001,a0002...a1  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2002-08-23 15:45 |只看该作者 |倒序浏览
除了用if分别对个、十、百、千位判断分别加0还有别的方法吗?

论坛徽章:
1
巳蛇
日期:2014-12-29 11:22:41
2 [报告]
发表于 2002-08-23 16:14 |只看该作者

怎样把文件序列a1,a2,a3...a11,a12...a1000改成a0001,a0002...a1

还是我抛砖引玉,创作脚本

$cat test
ls a* > tempfile1
sed 's/a//' tempfile1 > tempfile2
awk '{printf("mv a%s a%04s\n", $0, $0)}'  tempfile2 > tempfile3
chmod 700 tempfile3
./tempfile3
rm tempfile*

$chmod test

论坛徽章:
0
3 [报告]
发表于 2002-08-23 17:36 |只看该作者

怎样把文件序列a1,a2,a3...a11,a12...a1000改成a0001,a0002...a1

ls a*|awk '{
        num=substr($1,2,length($1)-1)&#59;
        printf "mv %s a%04d\n",$1,num
}'>rename.sh

sh rename.sh

论坛徽章:
0
4 [报告]
发表于 2002-08-23 21:40 |只看该作者

怎样把文件序列a1,a2,a3...a11,a12...a1000改成a0001,a0002...a1

for file in a*
do
newfile=`echo $file|awk '{printf "%04d", substr($1,2,length($1)-1)}'`
mv file $newfile
done

论坛徽章:
0
5 [报告]
发表于 2002-08-24 14:31 |只看该作者

怎样把文件序列a1,a2,a3...a11,a12...a1000改成a0001,a0002...a1

[这个贴子最后由goodboy在 2002/08/24 03:08pm 编辑]

substr函数不太懂,$1不是指运行该shell是后面带的第一个参数吗?
是不是在awk里面这些$0,$1...参数就变成它自己的了?

论坛徽章:
0
6 [报告]
发表于 2002-08-24 16:07 |只看该作者

怎样把文件序列a1,a2,a3...a11,a12...a1000改成a0001,a0002...a1

谢谢!
$1看来应该是指awk所使用的变量吧?我也想不通bjchenxu兄在mv a%s a%04d\n", $0, $0用$0表示什么?我用$1代替了$0,也有同样的效果啊。(sh)



论坛徽章:
0
7 [报告]
发表于 2002-08-25 19:31 |只看该作者

怎样把文件序列a1,a2,a3...a11,a12...a1000改成a0001,a0002...a1

$0含$1,$2.....
如果只有一个字段,那$0便等同于$1了.

论坛徽章:
0
8 [报告]
发表于 2002-08-26 08:57 |只看该作者

怎样把文件序列a1,a2,a3...a11,a12...a1000改成a0001,a0002...a1

谢谢斑竹!
回去刚看了《转帖:awk使用手册》开头就说了$0和$1、$2、$3等,看来得好好啃一啃书本了!

论坛徽章:
0
9 [报告]
发表于 2002-08-26 09:38 |只看该作者

怎样把文件序列a1,a2,a3...a11,a12...a1000改成a0001,a0002...a1

给个不用awk的,效率会低一点
ls -1 a*|while read j
do
        num=`echo $j|cut -b 2-`
        num=`printf a%04s $num`
        mv $j $num
done

论坛徽章:
1
巳蛇
日期:2014-12-29 11:22:41
10 [报告]
发表于 2002-08-26 10:06 |只看该作者

怎样把文件序列a1,a2,a3...a11,a12...a1000改成a0001,a0002...a1

还是改改valentime的答案吧,确实不错的
原文有两处小问题,呵呵

for file in a*
do
newfile=`echo $file|awk '{printf "a%04d", substr($1,2,length($1)-1)}'`
                                  ^
mv $file $newfile
   ^
done

稍微缩减一下:
for file in a*
do
mv $file `echo $file|awk '{printf "a%04d", substr($1,2,length($1)-1)}'`
done
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP