免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 4541 | 回复: 41

[文本处理] 怎样根据要求的文件名字,去替换不同的子文件夹里面的文档的名字? [复制链接]

论坛徽章:
0
发表于 2018-07-10 09:46 |显示全部楼层



在一个文件夹里面,有多个子文件夹(只有一层子文件夹),不同的子文件夹里面有不同名字的.txt文档


根据事先已准备好的的文档名字。比如:
  1. 0975青海果洛藏族(果洛州)
  2. 0970青海海北(海北州.海晏)
  3. 0972青海海东市(海东)
  4. 0974青海海南藏族(海南州.共和)
  5. 0977青海海西州(海西.德令哈)
  6. 0979青海海西州.格尔木
  7. 0973青海黄南藏族(黄南州)
  8. 0971青海西宁
  9. 0976青海玉树藏族(玉树州)
复制代码


去替换,不同的子文件夹里面有不同名字的.txt文档的名字(注意,替换后的文档仍在各自的文件夹里面)。
比如,这些名字分别是
  1. 果洛
  2. 海北
  3. 海晏
  4. 海东
  5. 海南州
  6. 共和
  7. 海西
  8. 德令哈
  9. 格尔木
  10. 黄南
  11. 西宁
  12. 玉树
复制代码



输出:
上面的名字经过对比、比较后,在不同的子文件夹里面替换成,事先已准备好的的文档名字。
如下:
  1. 0975青海果洛藏族(果洛州)
  2. 0970青海海北(海北州.海晏)
  3. 0970青海海北(海北州.海晏)
  4. 0972青海海东市(海东)
  5. 0974青海海南藏族(海南州.共和)
  6. 0974青海海南藏族(海南州.共和)
  7. 0977青海海西州(海西.德令哈)
  8. 0977青海海西州(海西.德令哈)
  9. 0979青海海西州.格尔木
  10. 0973青海黄南藏族(黄南州)
  11. 0971青海西宁
  12. 0976青海玉树藏族(玉树州)
复制代码















论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-10-11 06:20:0015-16赛季CBA联赛之山东
日期:2016-05-28 18:18:5615-16赛季CBA联赛之新疆
日期:2017-04-12 22:55:4715-16赛季CBA联赛之青岛
日期:2017-06-26 18:30:0315-16赛季CBA联赛之四川
日期:2017-09-04 12:27:0315-16赛季CBA联赛之福建
日期:2018-02-09 14:28:3315-16赛季CBA联赛之同曦
日期:2018-04-17 12:43:3415-16赛季CBA联赛之浙江
日期:2018-07-14 13:27:4015-16赛季CBA联赛之吉林
日期:2018-09-13 15:48:2915-16赛季CBA联赛之新疆
日期:2016-05-07 05:05:3215-16赛季CBA联赛之八一
日期:2016-03-14 12:32:06程序设计版块每日发帖之星
日期:2015-12-12 06:20:00
发表于 2018-07-10 10:12 |显示全部楼层
  1. awk 'ARGIND==1{a[$0]=$0}ARGIND==2{for(i in a){if($0~i)print $0}}' b a
复制代码

多了两行。。。。

论坛徽章:
0
发表于 2018-07-10 10:36 |显示全部楼层
回复 2# baby_神



好像没看明白我的提问

在子文件夹里面,分别的文档。我的意思,没有b






论坛徽章:
39
双子座
日期:2014-08-06 17:37:19极客徽章
日期:2016-12-07 14:03:402017金鸡报晓
日期:2017-01-10 15:13:292017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之新疆
日期:2017-03-24 16:36:1915-16赛季CBA联赛之江苏
日期:2017-04-26 17:19:08黑曼巴
日期:2018-03-07 18:56:5615-16赛季CBA联赛之八一
日期:2018-03-09 10:44:1015-16赛季CBA联赛之江苏
日期:2018-03-12 15:12:1915-16赛季CBA联赛之青岛
日期:2018-03-16 09:13:0515-16赛季CBA联赛之山东
日期:2018-04-27 18:23:0515-16赛季CBA联赛之新疆
日期:2018-05-04 11:29:30
发表于 2018-07-10 11:08 |显示全部楼层
  1. #!/bin/bash
  2. x=`find /xxxx -name '*.txt'`
  3. for i in $x;do
  4.     dirname=`dirname $i`
  5.     basename=`basename $i`
  6.     s=grep "$basename" a
  7.     mv $dirname/$basename $dirname/$s
  8. done
复制代码


试一下这个   我没有测试

论坛徽章:
0
发表于 2018-07-10 11:42 |显示全部楼层
回复 4# o枫叶o飘零


我没弄明白

测试下。好像不对。没修改过来新的名字

x=`find /xxxx -name '*.txt'`
for i in $x;do
    dirname=`H:\hou\ $i`
    basename=`0975青海果洛藏族(果洛州) $i`
    basename=`0970青海海北(海北州.海晏) $i`
    s=grep "$basename" a
    mv $dirname/$basename $dirname/$s
done



麻烦给弄个.bat  我直接放在指定的文件夹下面,运行修正子文件夹里面的文档







论坛徽章:
39
双子座
日期:2014-08-06 17:37:19极客徽章
日期:2016-12-07 14:03:402017金鸡报晓
日期:2017-01-10 15:13:292017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之新疆
日期:2017-03-24 16:36:1915-16赛季CBA联赛之江苏
日期:2017-04-26 17:19:08黑曼巴
日期:2018-03-07 18:56:5615-16赛季CBA联赛之八一
日期:2018-03-09 10:44:1015-16赛季CBA联赛之江苏
日期:2018-03-12 15:12:1915-16赛季CBA联赛之青岛
日期:2018-03-16 09:13:0515-16赛季CBA联赛之山东
日期:2018-04-27 18:23:0515-16赛季CBA联赛之新疆
日期:2018-05-04 11:29:30
发表于 2018-07-10 14:12 |显示全部楼层
bat不会写啊。。
x=`find /xxxx -name '*.txt'`
/xxxx就是txt文件所在的目录

basename和dirname不要修改  照着copy就行
s=grep "$basemname" a
这里a就是最开始提供的名字的文档

论坛徽章:
766
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
发表于 2018-07-10 14:13 |显示全部楼层
本帖最后由 Herowinter 于 2018-07-10 14:38 编辑

回复 1# rtzd

test.sh
  1. #!/bin/bash

  2. for f in `ls */*`
  3. do
  4.     dname=`dirname $f`
  5.     fname=`basename $f`

  6.     while read line
  7.     do
  8.         if [[ "$line" =~ "${fname%.*}" ]]; then
  9.             mv "$f" "${dname}/${line}.txt"
  10.             break
  11.         fi
  12.     done <i
  13. done
复制代码

执行test.sh前
  1. cat i
  2. 0975青海果洛藏族(果洛州)
  3. 0970青海海北(海北州.海晏)
  4. 0972青海海东市(海东)
  5. 0974青海海南藏族(海南州.共和)
  6. 0977青海海西州(海西.德令哈)
  7. 0979青海海西州.格尔木
  8. 0973青海黄南藏族(黄南州)
  9. 0971青海西宁
  10. 0976青海玉树藏族(玉树州)

  11. $ tree
  12. .
  13. |-- 1
  14. | |-- 果洛.txt
  15. | `-- 海晏.txt
  16. |-- 2
  17. | |-- 西宁.txt
  18. | `-- 黄南.txt
  19. |-- i
  20. `-- test.sh</p>
复制代码

执行后

  1. tree
  2. .
  3. |-- 1
  4. |   |-- 0970青海海北(海北州.海晏).txt
  5. |   `-- 0975青海果洛藏族(果洛州).txt
  6. |-- 2
  7. |   |-- 0971青海西宁.txt
  8. |   `-- 0973青海黄南藏族(黄南州).txt
  9. |-- i
  10. `-- test.sh
复制代码



论坛徽章:
0
发表于 2018-07-10 14:25 |显示全部楼层
回复 7# Herowinter

谢谢手机中

稍后



论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2018-07-10 16:58 |显示全部楼层
回复 1# rtzd


  1. cd a

  2. cat 1
  3. 0975青海果洛藏族(果洛州)
  4. 0970青海海北(海北州.海晏)
  5. 0972青海海东市(海东)
  6. 0974青海海南藏族(海南州.共和)
  7. 0977青海海西州(海西.德令哈)
  8. 0979青海海西州.格尔木
  9. 0973青海黄南藏族(黄南州)
  10. 0971青海西宁
  11. 0976青海玉树藏族(玉树州)

  12. tree -N a*
  13. a1
  14. ├── 共和.txt
  15. ├── 果洛.txt
  16. ├── 海北.txt
  17. └── 海东.txt
  18. a2
  19. ├── 德令哈.txt
  20. ├── 格尔木.txt
  21. ├── 海南州.txt
  22. └── 海晏.txt
  23. a3
  24. ├── 海西.txt
  25. ├── 黄南.txt
  26. ├── 西宁.txt
  27. └── 玉树.txt

  28. 0 directories, 12 files

  29. awk 'BEGINFILE{if(FILENAME!=ARGV[1]){split(FILENAME,t,"[/.]");for(i in a){if(a[i]~t[2]){cmd="mv "t[1]"/"t[2]"."t[3]" \042"t[1]"/"i"."t[3]"\042";f=1;break}};if(!f){for(i in a){if(i~t[2]){cmd="mv "t[1]"/"t[2]"."t[3]" \042"t[1]"/"i"."t[3]"\042";break}}};f="";system(cmd)}}FILENAME==ARGV[1]{split($0,s,"[()]");a[$0]=s[2];next}' 1 a*/*.txt

  30. tree -N a*
  31. a1
  32. ├── 0970青海海北(海北州.海晏).txt
  33. ├── 0972青海海东市(海东).txt
  34. ├── 0974青海海南藏族(海南州.共和).txt
  35. └── 0975青海果洛藏族(果洛州).txt
  36. a2
  37. ├── 0970青海海北(海北州.海晏).txt
  38. ├── 0974青海海南藏族(海南州.共和).txt
  39. ├── 0977青海海西州(海西.德令哈).txt
  40. └── 0979青海海西州.格尔木.txt
  41. a3
  42. ├── 0971青海西宁.txt
  43. ├── 0973青海黄南藏族(黄南州).txt
  44. ├── 0976青海玉树藏族(玉树州).txt
  45. └── 0977青海海西州(海西.德令哈).txt

  46. 0 directories, 12 files
复制代码

论坛徽章:
0
发表于 2018-07-10 19:00 |显示全部楼层
回复 9# wh7211


谢谢

今天有事,手机中

稍后回复



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP