免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: bmne
打印 上一主题 下一主题

[文本处理] 请问,有在线的吗?请扔个只保留不重复字符的行 [复制链接]

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
31 [报告]
发表于 2017-10-09 00:32 |只看该作者
本帖最后由 rubyish 于 2017-10-08 20:42 编辑

1: change floor30.pl setting

  1. my $str =
  2. "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

  3. my $want = 8;
  4. my $SIZE = 5;    # 5.X G
复制代码


run:
perl floor30.pl > PART

output:

  1. head = 0        1142670.44 G
  2. head = 1        18430.17 G
  3. head = 2        302.13 G
  4. head = 3        5.04 G
  5. gen PART OK

  6. LENSTR        = 62
  7. FINISH        = 8
  8. HEAD        = 3
复制代码


HERE:
LENSTR        = 62
FINISH        = 8
HEAD        = 3

2: change floor30.c
  1. // --------- USER ----------
  2. str STR = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  3. # define LENSTR    26
  4. # define FINISH    8
  5. # define HEAD      3
  6. // ---------- E N D --------
复制代码


3: compile floor30.c
gcc -march=native -Ofast floor30.c -o floor30


4: cat file PART(226920 lines)

  1. 0 1 2
  2. 0 1 3
  3. 0 1 4
  4. 0 1 5
  5. 0 1 6
  6. 0 1 7
  7. 0 1 8
  8. 0 1 9
  9. 0 1 10
  10. 0 1 11
  11. ...
  12. ...
  13. 61 60 57
  14. 61 60 58
  15. 61 60 59
复制代码


5: run
part1:  (FILE SIZE = 5.XG)
0 1 2 => file PART line 1
  1. ./floor30 0 1 2 > part1
复制代码


part2:  0 1 3 => file PART line 2
  1. ./floor30 0 1 3 > part2
复制代码


partX...

part226920:
  1. ./floor30 61 60 59 > part226920
复制代码


floor30.pl
  1. #!/usr/bin/perl
  2. # version 26, subversion 0 (v5.26.0)
  3. use 5.024;

  4. # ____________________USER____________________

  5. my $str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

  6. my $want = 8;
  7. my $SIZE = 5;    # G    5.X G

  8. # ____________________MAIN____________________

  9. my $LEN = length $str;
  10. my @num = reverse 1 .. $LEN;
  11. my $HEAD;
  12. for my $head ( 0 .. $want ) {
  13.     my $size = $want + 1;
  14.     $size *= $_ for @num[ $head .. $want - 1 ];
  15.     $size /= ( 1024 * 1024 * 1024 );
  16.     printf STDERR "head = $head\t%.02f G\n", $size;

  17.     if ( int($size) <= $SIZE ) {
  18.         $HEAD = $head;
  19.         last;
  20.     }
  21. }

  22. print STDERR 'gen PART ';
  23. gimme();
  24. say STDERR "OK\n";
  25. say STDERR "LENSTR\t= $LEN";
  26. say STDERR "FINISH\t= $want";
  27. say STDERR "HEAD\t= $HEAD\n";

  28. # ____________________SUB____________________
  29. sub gimme { E_( [ 0 .. $LEN - 1 ], [] ) }

  30. sub E_ {
  31.     my ( $a, $b ) = @_;
  32.     if ( @$b == $HEAD ) {
  33.         say "@$b";
  34.         return;
  35.     }
  36.     for my $i ( 0 .. $#$a ) {
  37.         E_( [ @$a[ 0 .. $i - 1, $i + 1 .. $#$a ] ], [ @$b, $a->[$i] ] );
  38.     }
  39. }

  40. __DATA__
  41. $_
复制代码


floor30.c
  1. // gcc -march=native -Ofast floor30.c -o floor30

  2. # include <stdio.h>
  3. # include <stdlib.h>

  4. typedef char kar;
  5. typedef char *str;

  6. // --------- U S E R ----------
  7. str STR = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  8. # define LENSTR    26
  9. # define FINISH    8
  10. # define HEAD      3
  11. // ---------- E N D --------

  12. # define LENDIT    (FINISH + 1)
  13. kar DAT[LENSTR];
  14. kar DIT[LENDIT];

  15. void floor30 (int);
  16. void help (str);

  17. /* ____________________ MAIN ____________________ */

  18. int main (int numa, str *para){
  19.     if (numa != (HEAD + 1)) help (para[0]);

  20.     int indes[HEAD];
  21.     for (int i = 0; i < HEAD; i++) {
  22.         indes[i] = atoi (para[i + 1]);
  23.         DIT[i]   = STR[indes[i]];
  24.     }

  25.     int head = HEAD;

  26.     for (int i = 0; i < LENSTR; i++) {
  27.         int ok = 1;
  28.         for (int j = 0; j < HEAD; j++)
  29.             if (i == indes[j]) {
  30.                 ok--; break;
  31.             }

  32.         if (ok) DAT[head++] = STR[i];
  33.     }

  34.     floor30 (HEAD);
  35. } /* main */
  36. /* _____________________ SUB _____________________ */

  37. void floor30 (int indes){
  38.     static int has[LENSTR];

  39.     if (indes == FINISH) {
  40.         puts (DIT);
  41.         return;
  42.     }

  43.     for (int i = HEAD; i < LENSTR; i++) {
  44.         if (has[i]) continue;
  45.         has[i]     = 1;
  46.         DIT[indes] = DAT[i];
  47.         floor30 (indes + 1);
  48.         has[i] = 0;
  49.     }
  50. }

  51. void help (str app){
  52.     printf ("\nUSE:\t%s", app);
  53.     for (int i = 1; i <= HEAD; i++) printf (" n%d", i);
  54.     puts ("");
  55.     exit (1);
  56. }
复制代码

论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
32 [报告]
发表于 2017-10-09 10:00 |只看该作者
本帖最后由 bmne 于 2017-10-09 13:42 编辑

回复 31# rubyish



太牛啦


离我越来越远,真是大牛

不好意思,容我消化消化,努力学习学习中,因我还没装perl




提示我已是最新版,不能再升级了,我升不到5.24以上,

没办法运行31楼的perl floor30.pl


1.jpg (11.19 KB, 下载次数: 35)

1.jpg

论坛徽章:
8
CU十四周年纪念徽章
日期:2017-08-28 17:16:1915-16赛季CBA联赛之北控
日期:2018-03-29 11:39:0615-16赛季CBA联赛之上海
日期:2018-05-21 10:46:10技术图书徽章
日期:2018-09-03 13:54:18技术图书徽章
日期:2018-09-03 13:54:2815-16赛季CBA联赛之四川
日期:2020-10-15 09:21:4720周年集字徽章-20	
日期:2020-10-28 13:53:0220周年集字徽章-庆
日期:2020-10-28 14:09:12
33 [报告]
发表于 2017-10-09 13:45 |只看该作者
  1. awk -F '' '{for(i=1;i<=NF;i++) a[$i]=$0 ; if(length(a) < NF) p=0 ; else p=1 ; delete a}p' file
复制代码

论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
34 [报告]
发表于 2017-10-09 13:58 |只看该作者
回复 33# 龙牙地主天



大牛

麻烦你看看31楼,回答下我的32楼的问题好吗?

若不升级perl版本   就没办法运行31楼  perl floor30.pl   了吗?

谢谢、谢谢!






论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
35 [报告]
发表于 2017-10-10 00:22 |只看该作者
if your perl 5.020

some.pl
  1. use 5.026;
复制代码


5.026 > 5.020 ~
1: try
change some.pl
use 5.020;    # your version

2: ...

论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
36 [报告]
发表于 2017-10-10 09:49 |只看该作者



路过看到的大牛,请帮助下。谢谢了、谢谢了

(因  rubyish  作息时间很晚。不在线)


请看看31楼

看 output:  下面的
head = 0
head = 1
head = 2
head = 3
分别是什么意思?

LENSTR  = 62  代表62个指定字符
FINISH  = 8     代表只生成8位的行
HEAD    = 3     这个我不懂是什么意思

另外,这个
my $str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
my $want = 8;                                代表只生成8位的行
my $SIZE = 5;    # G    5.X G          这一行我也不懂是什么意思(是文档的大小分割成5GB吗?)



请帮我下吧,实在是看不明白











论坛徽章:
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
37 [报告]
发表于 2017-10-10 10:10 |只看该作者
回复 36# bmne

programing is not your cup of tea

孩子辛苦你了 干别的事吧..


论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
38 [报告]
发表于 2017-10-10 10:17 |只看该作者
回复 37# jason680



大牛

你有写字这功夫。告诉告诉我不行吗?

我早就说过,我不是吃这碗饭的。但,五音不全的人,就不能看“中国好歌声”了?




论坛徽章:
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
39 [报告]
发表于 2017-10-10 10:53 |只看该作者
本帖最后由 jason680 于 2017-10-10 10:59 编辑

回复 38# bmne

>> ... 但,五音不全的人,就不能“中国好歌声”了?



""(do)跟""是两回事......

你一定要知道......那我们就来看看....
0123...789abc..xyzABC..XYZ
62取8 不重复 有多少结果...

存成文档
01234567<回车>
01234568<回车>
....
ZYXWVUTR<回车>
ZYXWVUTS<回车>

# 62取8      在文档中,8字符加回车
62*61*60*59*58*57*56*55 *9

$ echo "62*61*60*59*58*57*56*55*9/1024/1024/1024" | bc
1142670

在文档中,8字符加回车 须 1,142,670 GB约1.x PB或1024 TB以上


别说你的硬盘不够大...
很多公司,全公司也没这么大的硬盘容量...

你不是要分“段”取吗?

head= 1
把0xxxxxxx =>放在一文档
把1xxxxxxx =>放在一文档
...
把Zxxxxxxx =>放在一文档
每一个文档需要 1142670 GB / 62 = 18430  GB


head= 2
把01xxxxxx =>放在一文档
把02xxxxxx =>放在一文档
...
把ZXxxxxxx =>放在一文档
把ZYxxxxxx =>放在一文档
每一个文档需要 1142670 GB / (62*61) = 302  GB

head= 3
把012xxxxx =>放在一文档
把013xxxxx =>放在一文档
把014xxxxx =>放在一文档
...
把ZYWxxxxx =>放在一文档
把ZYXxxxxx =>放在一文档
每一个文档需要 1142670 GB / (62*61*60) = 5  GB


就是rubyish写的...
head = 0        1142670.44 G
head = 1        18430.17 G
head = 2        302.13 G
head = 3        5.04 G


其他自已慢慢想...
不然别老想干 你“”不了的事...

论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
40 [报告]
发表于 2017-10-10 11:07 |只看该作者
回复 39# jason680



大牛啊,这么长时间了,我多少能知道点你的脾气了。所以,采用了“激将法”,果然管用。谢谢、谢谢


其实我知道即使不重复字符,输出结果也大的惊人

rubyish  大牛确实好人一个,我心存感激。你看看,进来浏览的数量就能感觉到,还是有很多人喜欢看看rubyish的作品的

我本意是弄明白
head = 0
head = 1
head = 2
head = 3
是什么意思后,想进一步问问rubyish,我只要,运行前,看看不重复字符的混合后的结果是多少即可。其它不要。



谢谢你大牛出手帮助。谢谢、谢谢







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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP