免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1627 | 回复: 7

[文本处理] 如何根据条件产生文件及文件内容 [复制链接]

论坛徽章:
0
发表于 2017-03-17 06:00 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-03-17 09:31 |显示全部楼层
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my %hData = ();
  5. while (<DATA>){
  6.         last if (/\A\s*\z/);
  7.         my @aT = split;
  8.         $hData{"@aT[0, 1]"} = [@aT[-2, -1]];
  9. }

  10. while (<DATA>){
  11.         my @aT = split;
  12.         my ($fn, $content) = (sprintf("%s_%s.file", @aT[0, 1]), $aT[-1] . '_dat');
  13.         if (exists ($hData{"@aT[0, 1]"})){
  14.                 ($fn, $content) = @{$hData{"@aT[0, 1]"}};
  15.         }
  16.         open (my $FHw, '>', $fn);
  17.         print $FHw $content, "\n";
  18.         close ($FHw);
  19. }

  20. __DATA__
  21. 10        ABC        SPECIALFILENAME.sh        SPECIAL_CONTENT

  22. 10        ABC        YYYYMMDD
  23. 10        AAA        20170101
  24. 20        BBB        20170303
复制代码

论坛徽章:
0
发表于 2017-03-17 10:34 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
发表于 2017-03-17 10:45 |显示全部楼层
  1. awk 'NR==FNR&&FNR>=2{f[$1,$2]=$3;c[$1,$2]=$4;next}NR>FNR&&FNR>=2{if(f[$1,$2])print c[$1,$2] > f[$1,$2]; else print $3"_dat" > $1"_"$2".file"}' file2 file1
复制代码

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2017-03-17 10:52 |显示全部楼层

  1. awk 'NR==FNR{if(!/^Z/)a[$1$2]=$2 FS $3;next}/^Z/{print "filename" FS "filecontent";next}{$0=a[$1$2]?a[$1$2]:$1"_"$2".file" FS $3"_dat"}1' file2 file1|column -t
复制代码

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
发表于 2017-03-17 10:56 |显示全部楼层
  1. awk 'NR==FNR{if(NR>2&&NF)s=s $1"_"$2".file "$3"_dat\n";next}{printf FNR<2?tolower($3" file"$4"\n"):$3" "$4"\n"s}' d e
  2. filename filecontent
  3. SPECIALFILENAME.sh SPECIAL_CONTENT
  4. 10_AAA.file 20170101_dat
  5. 20_BBB.file 20170303_dat
复制代码

论坛徽章:
145
技术图书徽章
日期: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-03-17 10:59 |显示全部楼层
本帖最后由 jason680 于 2017-03-17 11:00 编辑

回复 3# KEN6503

$ awk '{k=$1"_"$2}/^ZONE/{next}FNR==NR{f[k]=$3;t[k]=$4;next}{if(f[k])print t[k]>f[k];else print $3"_dat">k".file"}' file2 file1

$ grep . SPEC* *_*.file
SPECIALFILENAME.sh:SPECIAL_CONTENT
10_AAA.file:20170101_dat
20_BBB.file:20170303_dat

论坛徽章:
0
发表于 2017-03-17 19:34 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP