标题: [文本处理] 批处理如何统计文本内容每行重复出现的次数? [打印本页]
作者: nmemtf 时间: 2009-12-3 19:26 标题: 批处理如何统计文本内容每行重复出现的次数?
我有一个文本hm.txt内容如下:
346
790
353
094
517
020
302
149
030
765
380
153
369
616
448
954
950
793
573
745
999
254
112
016
960
088
825
674
562
984
136
183
505
807
570
320
149
312
372
898
125
266
320
149
930
179
230
308
403
428
363
690
156
132
828
830
172
802
793
570
543
933
544
898
738
857
662
249
437
612
303
268
816
400
706
457
475
014
022
357
026
659
669
979
081
407
409
322
042
159
160
418
148
144
979
382
836
040
154
626
934
945
000
300
492
653
624
199
918
464
469
154
102
274
327
560
032
442
408
487
904
197
545
781
422
610
560
385
931
466
817
228
082
721
416
226
427
364
179
303
180
938
640
971
064
028
831
925
083
625
724
590
067
869
717
985
788
386
752
747
273
132
151
057
307
128
242
680
923
371
959
419
597
553
470
674
448
615
049
667
001
865
085
589
697
152
374
413
409
340
950
524
103
840
409
161
964
979
164
465
458
156
563
799
681
683
647
833
914
458
280
640
728
864
015
166
962
884
751
213
529
636
934
525
032
837
167
661
604
913
395
132
766
076
837
622
699
223
538
431
107
725
647
000
750
931
896
795
914
369
404
050
337
928
182
055
190
201
528
002
223
032
700
268
489
309
210
768
980
186
816
815
409
922
020
891
560
786
896
234
766
579
315
549
547
209
794
836
045
144
997
819
905
835
808
320
749
107
104
794
294
424
971
525
679
764
843
172
867
967
518
633
178
518
548
493
000
096
003
053
535
355
106
991
811
502
213
440
052
007
368
433
398
736
187
687
915
071
452
342
699
368
541
119
393
982
807
014
400
364
055
632
813
801
820
363
475
159
927
671
754
438
951
499
037
916
196
047
397
403
157
626
434
869
304
740
334
514
328
135
358
344
429
141
384
298
506
918
785
529
194
444
767
514
236
147
540
897
440
968
140
268
737
375
989
393
939
834
508
416
389
645
698
567
652
658
208
359
774
207
443
994
661
055
665
016
718
085
351
047
821
303
328
999
988
576
558
892
530
456
376
877
076
852
161
821
809
046
003
851
085
069
290
792
402
474
937
436
585
485
197
730
515
691
580
985
207
832
603
645
477
705
359
048
192
505
663
146
301
181
431
992
223
644
736
539
974
056
269
373
832
419
986
722
570
302
890
412
731
938
218
221
097
110
714
566
831
063
719
453
572
389
351
188
841
508
139
037
627
048
995
838
147
354
209
817
565
475
446
200
919
713
965
586
551
059
247
362
035
500
288
696
623
845
017
510
911
281
534
640
669
348
214
279
468
889
298
612
823
188
230
830
062
083
284
367
013
154
304
681
642
567
239
318
648
685
061
822
317
856
761
740
176
438
457
244
738
597
772
127
438
807
073
063
323
844
963
173
299
773
156
695
423
454
751
804
412
550
319
587
399
707
008
906
860
839
549
666
423
398
790
292
345
869
894
937
480
430
759
335
566
095
593
615
608
940
367
684
956
459
850
161
654
911
349
056
490
344
004
879
374
779
960
672
591
729
310
880
744
669
849
610
552
640
583
551
030
818
965
789
817
663
789
581
073
480
607
633
692
081
827
003
942
879
950
554
里面的数字在000-999之间,请高手帮忙写一个批处理,统计每一个数的出现次数。没出现的数可以不统计
作者: vsbat 时间: 2009-12-3 19:46
- @echo off
- for /f %%i in (hm.txt) do (
- if defined _%%i (set /a _%%i+=1
- ) else (set _%%i=1)
- )
- for /f "tokens=1,2 delims=_=" %%a in ('set _') do echo 出现 %%a 的次数 %%b
- pause
复制代码
[ 本帖最后由 vsbat 于 2009-12-3 19:48 编辑 ]
作者: Batcher 时间: 2009-12-3 22:39
- gawk "{a[$0]+=1}END{for (i in a) print i,a[i]}" hm.txt > hm_new.txt
复制代码
第三方命令行工具 gawk.exe 下载地址:
http://bbs.bathome.net/thread-1114-1-1.html
作者: batman 时间: 2009-12-3 23:21
原帖由 vsbat 于 2009-12-3 19:46 发表
@echo off
for /f %%i in (hm.txt) do (
if defined _%%i (set /a _%%i+=1
) else (set _%%i=1)
)
for /f "tokens=1,2 delims=_=" %%a in ('set _') do echo 出现 %%a 的次数 %%b
pause
这样每个数出现的次数都会少1次,如只出现一次的,将会没有次数值。
解决办法是开启变量延迟或把set _%%i=1改成set /a _%%i=1
[ 本帖最后由 batman 于 2009-12-3 23:25 编辑 ]
作者: zqz0012005 时间: 2009-12-3 23:37 标题: 回复 4楼 的帖子
batman看错了吧?不会的。
作者: nmemtf 时间: 2009-12-3 23:40 标题: 谢谢
感谢2楼和4楼的,3楼提供的我不会用。另外我想把没出现的数也列出来,统计结果升序排列并保存在一个文本文件中。请在帮一个忙
[ 本帖最后由 nmemtf 于 2009-12-3 23:45 编辑 ]
作者: batman 时间: 2009-12-3 23:56
请将要求更新在顶楼,代码如下:- @echo off&setlocal enabledelayedexpansion
- cd.>list.txt
- for /f %%a in (hm.txt) do (
- if not defined _%%a (
- set /a _%%a=1
- ) else (
- set /a _%%a+=1
- )
- )
- for /l %%a in (0,1,999) do (
- set "str=00%%a"&set "str=!str:~-3!"
- if defined _!str! (
- for %%a in (!str!) do echo 数!str!出现次数为!_%%a!次>>list.txt
- ) else (
- echo 数!str!没有出现过>>list.txt
- )
- )
- start list.txt
复制代码
[ 本帖最后由 batman 于 2009-12-3 23:59 编辑 ]
作者: terse 时间: 2009-12-4 00:23
不在for /f 里面 SET _
直接 ....for /l %%i in (1001 1 1999) do .... 可行否?
停留一下 竟然有了啊
- @echo off&setlocal enabledelayedexpansion
- for /f %%i in (hm.txt) do set /a "_%%i+=1"
- for /l %%i in (1001 1 1999) do (
- set "str=%%i"
- set "str=!str:~-3!"
- if defined _!str! (for %%j in (_!str!) do echo !str!出现次数 !%%j!)else echo !str!出现次数 0
- )
- pause
复制代码
[ 本帖最后由 terse 于 2009-12-4 00:25 编辑 ]
作者: batman 时间: 2009-12-4 00:30
原帖由 terse 于 2009-12-4 00:23 发表
不在for /f 里面 SET _
直接 ....for /l %%i in (1001 1 1999) do .... 可行否?
停留一下 竟然有了啊
@echo off&setlocal enabledelayedexpansion
for /f %%i in (hm.txt) do set /a "_%%i+=1"
for /l % ...
思维定向,思维定向,前面真的是真接set /a _%%i+=1就可以了
[ 本帖最后由 batman 于 2009-12-4 00:32 编辑 ]
作者: latu327 时间: 2011-1-14 17:36
谢谢提供了!!!!!!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |