Chinaunix
标题:
如何删除2个文本中相同的数据
[打印本页]
作者:
vkqo
时间:
2013-07-07 15:43
标题:
如何删除2个文本中相同的数据
比如
a.txt
123456
111111
233331
123333
b.txt
aabeef
311322
355552
123456
删除生成的c.txt(把2个文本相同的123456删除了)为
111111
233331
123333
aabeef
311322
355552
我用的是这个,但是每次要把a文本和b文本放到一起,才可以,有没有不用把a.txt和b.txt放在一起,直接能比较2个文件,删除,生成另外一个文本
sort a.txt |uniq -u >c.txt
作者:
关阴月飞
时间:
2013-07-07 16:11
本帖最后由 关阴月飞 于 2013-07-07 16:13 编辑
sort a.txt b.txt|uniq -u
复制代码
awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}' a.txt b.txt
复制代码
作者:
vkqo
时间:
2013-07-07 16:28
谢谢楼上的
作者:
vkqo
时间:
2013-07-07 16:31
sort好像不行,提示:输入文件指定了两次。
作者:
关阴月飞
时间:
2013-07-07 16:59
回复
4#
vkqo
额,我在LINUX上是可行的,如果直接SORT两个文件不行,就这样吧:
cat a.txt b.txt |sort |uniq -u
复制代码
作者:
357749340
时间:
2013-07-07 21:19
直接两个文本没试过
作者:
心若寒江雪
时间:
2013-07-08 09:43
uniq -u 可以
作者:
mmwobuaini
时间:
2013-07-08 12:55
关阴月飞 发表于 2013-07-07 16:11
请问,我想知道下面代码中,a b文件执行过程是怎么样的?
awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}' a.txt b.txt
复制代码
{a[$0]++}是先读取a完后 读取b 完后 执行end后语句?
作者:
关阴月飞
时间:
2013-07-08 12:59
回复
8#
mmwobuaini
{a[$0]++}是先读取a完后 读取b 完后 执行end后语句, 就是这样的。
作者:
wenhq
时间:
2013-07-08 14:03
diff file1 file2 也可以吧?
作者:
wenhq
时间:
2013-07-08 14:11
本帖最后由 wenhq 于 2013-07-08 14:13 编辑
#!/usr/bin/perl
use strict;
use warnings;
$\="\n";
open my $fh1, '<', 'file1' or die $!;
open my $fh2, '<', 'file3' or die $!;
open my $out, '>', 'file3' or die $!;
chomp(my @arr1=<$fh1>);
chomp(my @arr2=<$fh2>);
foreach my $x (@arr1){
print $out $x if (!grep (/^\Q$x\E$/,@arr2));
}
close $fh1;
close $fh2;
close $out;
add perl hash solution
use strict;
use warnings;
my %exclude;
open my $fh, '<', 'text2.txt' or die $!;
while (<$fh>) {
chomp;
$exclude{$_}++;
}
open $fh, '<', 'text1.txt' or die $!;
while (<$fh>) {
chomp;
print "$_\n" unless $exclude{$_};
}
作者:
wang1352083
时间:
2013-07-08 15:30
diff 怎么输出呢成规范文本呢?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2