[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理怎样删除组成元素相同的重复行?

文本中有很多行,下面只是一部分,每行都是三列随机数字:
1 1 1
1 1 2
1 2 1
2 3 0
2 1 1
0 2 3
4 5 6

只要组成元素相同,就视为重复行。比如以下三行均视为重复行:
1 1 2
1 2 1
2 1 1
还有以下两行也是重复行:
2 3 0
0 2 3

对于重复行,任意保留中一行即可。对于非重复行,原样保留。

  1. gawk "BEGIN {p[0]=2;p[1]=3;p[2]=5;p[3]=7;p[4]=11;p[5]=13;p[6]=17;p[7]=19;p[8]=23;p[9]=29;}!a[p[$1]*p[$2]*p[$3]]++" a.txt
复制代码

TOP

  1. gawk "!a[10^$1+10^$2+10^$3]++" a.txt
复制代码

TOP

  1. gawk "!a[$1^5+$2^5+$3^5]++" a.txt
复制代码

TOP

回复 20# 545810831


勾股定理就是一个比较容易想到的反例
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

我之前没有做过论证就做出了判断:"一行各个元素平方和只有各个元素相

同时才会相等" 我找几个数 如6 6 7 和6 9 2 他们的平方和是121,而他

们组成元素是不同的

TOP

我之前没有经过论证就做出论断 "一行各个元素平方和只有各个元素相同时才会相等" 是错误的,我找几个数
如 6 6 7 和6 9 2 他们的平方和是121  而他们组成元素是不同的

TOP

效率不太好
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. (For /F "delims=" %%i In (a.txt) Do (
  3.   Set "Str="
  4.   For /F %%j In ('^(For %%j In ^(%%i^) Do Echo %%j^)^|Sort') Do Set "Str=!Str! %%j"
  5.   If Not Defined _!Str:~1! Echo %%i&Set "_!Str:~1!=a"
  6. ))>b.txt
  7. Start b.txt
复制代码
一路飘过的鸟~~~

TOP

另外怎么没人用冒泡排序啊,个人认为可以在FOR /F中用它来达到我16L的转换
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

  1. @echo off
  2. if exist temp1.txt (del /a /f temp1.txt)
  3. if exist temp2.txt (del /a /f temp2.txt)
  4. for /f "tokens=1-3" %%i in (1.txt) do (
  5.     (echo %%i&echo %%j&echo %%k)|sort
  6. )>>temp1.txt
  7. for /f "tokens=1,2 delims=:" %%i in ('findstr /n .* temp1.txt') do (
  8.     setlocal enabledelayedexpansion
  9.     set /a a=%%i%%3
  10.     if !a! equ 1 (echo.&&set /p=%%j<nul) else (set /p=%%j<nul)
  11. )>>temp2.txt
  12. del /a /f temp1.txt
  13. pause
复制代码
运行这个代码可以帮你转换成"去掉重复行",之后就好处理了
好久没写了,可能不给力
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

本着解决问题的思想,如果只是数字可以试试用Perl解决:
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. my %count;
  5. while (<DATA>) {
  6. my @number=split;
  7. chomp (my $sorted_number=join "",sort { $a <=> $b } @number);
  8. $count{$sorted_number}++;
  9. print "$_" if $count{$sorted_number}==1;
  10. }
  11. __END__
  12. 1 1 1
  13. 1 1 2
  14. 1 2 1
  15. 2 3 0
  16. 2 1 1
  17. 0 2 3
  18. 5 4 6
  19. 4 5 6
  20. 7 8 9
  21. 8 7 9
  22. 1 1 1
复制代码

TOP

不过如果列数与指数相同,好像没想到有反例可以证明这种算法不严谨

TOP

有想法,不过也是不严谨,3 0 0 与 2 2 1 平方和相同

TOP

一行各个元素平方和只有各个元素相同时才会相等,所以稍稍改一下代码即可,不知文本有多长,可能导致卡机?

TOP

错了?解决不了问题

TOP

返回列表