免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
123下一页
最近访问板块 发新帖
查看: 24668 | 回复: 22

[文本处理] 批量插入文件名中的数字 [复制链接]

论坛徽章:
0
发表于 2018-06-19 14:49 |显示全部楼层


批量插入文件名中的开头部分的数字,让这些数字做第一列

比如:在 H:\bin\源数据\    中的文件夹里面,有     7模范.txt       8榜样.txt      共两个文档(实际有上百个)

7模范.txt
  1. 12345
  2. 67858
  3. 87432
复制代码


8榜样.txt
  1. 57669
  2. 10374
  3. 94924
复制代码


输出后:

在 H:\bin\输出数据\  中,原来的同样的文件名字下,更改为

7模范.txt
  1. 7 12345
  2. 7 67858
  3. 7 87432
复制代码


8榜样.txt
  1. 8 57669
  2. 8 10374
  3. 8 94924
复制代码












论坛徽章:
3
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:21
发表于 2018-06-19 15:50 |显示全部楼层
本帖最后由 christmas1102 于 2018-06-19 15:53 编辑
  1. ls|xargs -i awk '{match(FILENAME,/^([0-9]).*/,a);print a[1],$0>FILENAME}' {}
复制代码

这波操作会直接修改原文件,先做好备份,这里管道是按照 ls,所以会修改当前目录下的所有文件,如果需要筛选文件,先管道前完成

论坛徽章:
0
发表于 2018-06-19 17:29 |显示全部楼层
回复 2# christmas1102


向你学习

论坛徽章:
0
发表于 2018-06-20 06:29 |显示全部楼层
回复 2# christmas1102



  1. ls /bin/222|xargs -i awk '{match(FILENAME,/^([0-9]).*/,a);print a[1],$0>FILENAME}' {}
  2. awk: 致命错误:无法以读模式打开文件“7模范.txt”(No such file or directory)
  3. awk: 致命错误:无法以读模式打开文件“8榜样.txt”(No such file or directory)
复制代码








能看到的
  1. ls /bin/222
  2. 7模范.txt  8榜样.txt
复制代码






论坛徽章:
3
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:21
发表于 2018-06-20 09:25 |显示全部楼层
本帖最后由 christmas1102 于 2018-06-20 09:34 编辑

回复 4# rtzd

CD到这个目录下做操作吧,因为ls列出来的是文件名 awk后面接的文件名是不带路径的,如果不是CD在工作目录下,肯定会告诉你找不到这个文件另外,如果目录下还有多层子目录... 那 ls 就不合适了,用find会好点

  1. find ./test011 -type f|xargs -i awk '{match("{}","\57([0-9])[^\57]*$",a);print a[1],$0>"{}"}' {}
复制代码

可以把最后的重定向去掉,试试看再做修改操作,还有match的问题..这里只匹配 一个数字,如果文件名开头有两位数,三位数,那要修改正则反正这要看你具体情况了


论坛徽章:
0
发表于 2018-06-20 09:55 |显示全部楼层
回复 5# christmas1102

谢谢,谢谢
cd \222后

这个好用了。正确
ls|xargs -i awk '{match(FILENAME,/^([0-9]).*/,a);print a[1],$0>FILENAME}' {}


这个,运行后,结果没变化
find YOURPWD -type f |xargs -i awk '{match("{}","\57([0-9])[^\57]*$",a);print a[1],$0>FILENAME}' {}



论坛徽章:
19
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:33黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:0915-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:3715-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59CU十四周年纪念徽章
日期:2018-05-15 11:36:3815-16赛季CBA联赛之广东
日期:2018-05-14 09:52:42
发表于 2018-06-20 11:40 |显示全部楼层
回复 1# rtzd


  1. cd /bin/源数据
  2. awk '{a=gensub("[^0-9]","","g",FILENAME);print a,$0>"/bin/输出数据/"FILENAME""}' *.txt
复制代码

论坛徽章:
3
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:21
发表于 2018-06-20 12:26 |显示全部楼层
回复 6# rtzd

把 YOURPWD 改成你文件所在的的绝对路径

论坛徽章:
0
发表于 2018-06-20 15:12 |显示全部楼层
回复 7# wh7211


这个代码好。

确实厉害,方便     




另,若有点时间给个 按汉字排序代码,把下面里面的,山东及广东的排在一起。当然了,只是举例,实际有很多种。

  1. 0310河北邯郸HD.txt
  2. 0349山西朔州SZ.txt
  3. 0377河南南阳NY.txt
  4. 0411辽宁大连DL.txt
  5. 0437吉林辽源LY.txt
  6. 0455黑龙江绥化NH.txt
  7. 0510江苏无锡WX.txt
  8. 0530山东菏泽HZ.txt
  9. 0554安徽淮南HN.txt
  10. 0631山东威海WH.txt
  11. 0660广东汕尾SW.txt
  12. 0662广东阳江YJ.txt
  13. 0710湖北襄阳XY.txt
  14. 0730湖南岳阳YY.txt
  15. 0755广东深圳SZ.txt
  16. 0777广西钦州QZ.txt
  17. 0794江西抚州FZ.txt
复制代码









论坛徽章:
3
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:21
发表于 2018-06-20 16:20 |显示全部楼层
  1. awk --re-interval '{match($0,/[0-9]{4}(.*)[A-Z]{2}\..*/,b);a[b[1]]=$0}END{l=asorti(a,c);for(i=1;i<=l;i++)print a[c[i]]}' urfile
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

【CUer福利】柯尼卡美能达2018数字化整合解决方案巡展
智领共创链动价值-2018数字化整合解决方案巡展

2018年11月,柯尼卡美能达携手主流IT网络媒体IT168及旗下ITPUB、ChinaUnix等论坛,特此邀请企业IT管理、运维人员/办公设备采购负责人员共同参与,分享柯尼卡美能达“智领共创链动价值”-2018数字化整合解决方案巡展!现场体验MOBOTIX智能视频监控解决方案!

活动入口>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP