忘记密码   免费注册 查看新帖 |

ChinaUnix.net

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

[文本处理] 请支援,把文件名的部分字段存到该文件的指定属性内 [复制链接]

论坛徽章:
0
发表于 2017-12-25 18:53 |显示全部楼层
文件名为:171001_17_1B1#低压NP03S01-PAN0111-进线1_间隔图.xml
              171022_17_1B1#低压NP03S01-PAN0118-母联_间隔图.xml
文件名的格式一致,长度不一致,我需要文件名的名字部分1B1#低压NP03S01-PAN0118-母联_间隔图,存放到文件的name属性下
文件的格式如下:
<?xml version = '1.0' encoding = 'GB2312'?>
<picture>
<property>
<name>1B1#低压NP03S01-PAN0111-进线1_间隔图</name>
  <class>2</class>
  <type>9</type>
  <stationid>17</stationid>
  <sequence>171001</sequence>
  <screensum>1</screensum>
  <backbmp></backbmp>
  <size>1920,1000</size>
  <backcol>154,154,154</backcol>
</property>

请大神帮助?

论坛徽章:
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
发表于 2017-12-25 20:58 |显示全部楼层
本帖最后由 wh7211 于 2017-12-25 21:00 编辑

回复 1# llony232


  1. cat 171001_17_1B1\#低压NP03S01-PAN0111-进线1_间隔图.xml
复制代码

输出:
<?xml version = '1.0' encoding = 'GB2312'?>
<picture>
<property>
<name>xxx</name>
  <class>2</class>
  <type>9</type>
  <stationid>17</stationid>
  <sequence>171001</sequence>
  <screensum>1</screensum>
  <backbmp></backbmp>
  <size>1920,1000</size>
  <backcol>154,154,154</backcol>
</property>

  1. awk '/<name>/{a=gensub("([0-9]+_){2}|.xml","","g",FILENAME);$0=gensub("(<name>).*(</name>)","\\1"a"\\2","g")}1' 171001_17_1B1\#低压NP03S01-PAN0111-进线1_间隔图.xml
复制代码

输出:
<?xml version = '1.0' encoding = 'GB2312'?>
<picture>
<property>
<name>1B1#低压NP03S01-PAN0111-进线1_间隔图</name>
  <class>2</class>
  <type>9</type>
  <stationid>17</stationid>
  <sequence>171001</sequence>
  <screensum>1</screensum>
  <backbmp></backbmp>
  <size>1920,1000</size>
  <backcol>154,154,154</backcol>
</property>

论坛徽章:
0
发表于 2017-12-26 11:14 |显示全部楼层
感谢大神的支持,但是没有满足我的要求,可能是我没有表述清楚,在此文件夹内有2百个左右的文件,我不想在脚本中体现具体的文件名,读入文件夹内符合所有的.xml文件,然后把文件名的部分放到name属性下,输出文件名+.name的文件awk '{if($1~/<name>/) {a=FILENAME;$1=("<name>"substr(a,11)</name>")}}{print > FILENAME“.name”}' *.xml
距离和我得到的结果相差name多了.xml

论坛徽章:
0
发表于 2017-12-26 11:15 |显示全部楼层
感谢大神的支持,但是没有满足我的要求,可能是我没有表述清楚,在此文件夹内有2百个左右的文件,我不想在脚本中体现具体的文件名,读入文件夹内所有的.xml文件,然后把文件名的部分放到name属性下,输出文件名+.name的文件awk '{if($1~/<name>/) {a=FILENAME;$1=("<name>"substr(a,11)</name>")}}{print > FILENAME“.name”}' *.xml
距离和我得到的结果相差name多了.xml

论坛徽章:
0
发表于 2017-12-26 11:15 |显示全部楼层
感谢大神的支持,但是没有满足我的要求,可能是我没有表述清楚,在此文件夹内有2百个左右的文件,我不想在脚本中体现具体的文件名,读入文件夹内所有的.xml文件,然后把文件名的部分放到name属性下,输出文件名+.name的文件
awk '{if($1~/<name>/) {a=FILENAME;$1=("<name>"substr(a,11)</name>")}}{print > FILENAME“.name”}' *.xml
距离和我得到的结果相差name多了.xml

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2017-12-26 14:58 |显示全部楼层
本帖最后由 1cpuer 于 2017-12-28 13:51 编辑

回复 5# llony232

# ----  2017-12-26 14:55:49: 1514271349:0;  # awk '{if($1~/<name>/) {a=FILENAME;$1=("<name>"substr(a,11)"</name>")}}{print $1}' *.xml
<?xml
<picture>
<property>
<name>1B1#低压NP03S01-PAN0111-进线1_间隔图.xml</name>
<class>2</class>
<type>9</type>
<stationid>17</stationid>
<sequence>171001</sequence>
<screensum>1</screensum>
<backbmp></backbmp>
<size>1920,1000</size>
<backcol>154,154,154</backcol>
</property>


# [ /home/soio/1bs/awks ]
# ----  2017-12-26 14:55:51: 1514271351:0;  # awk '{if($1~/<name>/) {a=FILENAME;$1=("<name>"substr(a,11)"</name>")}}{print > FILENAME."name"}' *.xml
awk: 命令行:1: {if($1~/<name>/) {a=FILENAME;$1=("<name>"substr(a,11)"</name>")}}{print > FILENAME."name"}
awk: 命令行:1:                                                                                   ^ syntax error

######FILENAME."name" ##--"name"   是\w 单词 name 字符串



# awk '{if($1~/<name>/) {a=FILENAME;$1=("<name>"substr(a,11)"</name>")}}{print > FILENAME}' *.xml

论坛徽章:
0
发表于 2017-12-26 17:05 |显示全部楼层
  1. $你的目录 = 'a:\pscode\TEMP_2017\temp271' #用户输入


  2. $前半段 =
  3. @'
  4. <?xml version = '1.0' encoding = 'GB2312'?>
  5. <picture>
  6. <property>
  7. <name>
  8. '@

  9. $后半段 =
  10. @'
  11. </name>
  12.   <class>2</class>
  13.   <type>9</type>
  14.   <stationid>17</stationid>
  15.   <sequence>171001</sequence>
  16.   <screensum>1</screensum>
  17.   <backbmp></backbmp>
  18.   <size>1920,1000</size>
  19.   <backcol>154,154,154</backcol>
  20. </property>
  21. '@

  22. $所有xml文件 = Get-ChildItem -LiteralPath $你的目录 "*.xml" -File  #想带有子目录的话,加上 -Recurse
  23. foreach ($当前文件 in $所有xml文件)
  24. {
  25.         $值 = $当前文件.basename.Substring(10,($当前文件.basename.length - 10))
  26.         $输出文件名 = Join-Path  -Path $当前文件.DirectoryName -ChildPath ($当前文件.basename + '.name')
  27.         Add-Content -LiteralPath $输出文件名 -Value $前半段 -Encoding oem -NoNewline
  28.         Add-Content -LiteralPath $输出文件名 -Value $值 -Encoding oem -NoNewline
  29.         Add-Content -LiteralPath $输出文件名 -Value $后半段 -Encoding oem
  30. }
复制代码

论坛徽章:
130
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2017-12-26 18:08 |显示全部楼层
回复 1# llony232

try this way ...

$ grep -C1 name 17*171001_17_1B1#低压NP03S01-PAN0111-进线1_间隔图.xml-<property>
171001_17_1B1#低压NP03S01-PAN0111-进线1_间隔图.xml:<name>...</name>
171001_17_1B1#低压NP03S01-PAN0111-进线1_间隔图.xml-  <class>2</class>
--
171022_17_1B1#低压NP03S01-PAN0118-母联_间隔图.xml-<property>
171022_17_1B1#低压NP03S01-PAN0118-母联_间隔图.xml:<name>...</name>
171022_17_1B1#低压NP03S01-PAN0118-母联_间隔图.xml-  <class>2</class>

$ perl -i -pe '{if(/<name>/){$f=$ARGV;$f=~s/.xml//;$f=~s/^\d+_\d+_//;s|(<name>).*?(</name>)|$1$f$2|}}' 17*

$ grep -C1 name 17*
171001_17_1B1#低压NP03S01-PAN0111-进线1_间隔图.xml-<property>
171001_17_1B1#低压NP03S01-PAN0111-进线1_间隔图.xml:<name>1B1#低压NP03S01-PAN0111-进线1_间隔图</name>
171001_17_1B1#低压NP03S01-PAN0111-进线1_间隔图.xml-  <class>2</class>
--
171022_17_1B1#低压NP03S01-PAN0118-母联_间隔图.xml-<property>
171022_17_1B1#低压NP03S01-PAN0118-母联_间隔图.xml:<name>1B1#低压NP03S01-PAN0118-母联_间隔图</name>
171022_17_1B1#低压NP03S01-PAN0118-母联_间隔图.xml-  <class>2</class>

论坛徽章:
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
发表于 2017-12-29 17:02 |显示全部楼层
回复 3# llony232


  1. awk '{a=gensub("([0-9]+_){2}|.xml","","g",FILENAME);$0=gensub("(<name>).*(</name>)","\\1"a"\\2","g")}{print>a".name"}' *.xml
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP