cd 发帖数: 32 | 1 一个文件有多行, 每一行都是|隔开的多个field, 比如:
field1|field2|field3|field4|field5
对任何两行,如果前两field值一样,则认为是重复行。
请问如何重新输出一个文件,去掉这些重复行。
首先采纳的意见给包子 :-)
谢谢 |
Z****e 发帖数: 2999 | 2 grep -v "^\(.*\)|\1"
【在 cd 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 一个文件有多行, 每一行都是|隔开的多个field, 比如: : field1|field2|field3|field4|field5 : 对任何两行,如果前两field值一样,则认为是重复行。 : 请问如何重新输出一个文件,去掉这些重复行。 : 首先采纳的意见给包子 :-) : 谢谢
|
l*****n 发帖数: 633 | 3 每一行field个数都一样吗?
【在 cd 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 一个文件有多行, 每一行都是|隔开的多个field, 比如: : field1|field2|field3|field4|field5 : 对任何两行,如果前两field值一样,则认为是重复行。 : 请问如何重新输出一个文件,去掉这些重复行。 : 首先采纳的意见给包子 :-) : 谢谢
|
Z****e 发帖数: 2999 | 4 看错了。。。以为是filter掉前两个field一样的行...
【在 Z****e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : grep -v "^\(.*\)|\1"
|
cd 发帖数: 32 | 5 每行的field数一样,但是有些field可能是空 比如
field1|field2|field3||field5 |
c******l 发帖数: 36 | 6 awk -F'|' '{key=$1"|"$2}!(key in a){a[key]=1;print}' file
【在 cd 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 一个文件有多行, 每一行都是|隔开的多个field, 比如: : field1|field2|field3|field4|field5 : 对任何两行,如果前两field值一样,则认为是重复行。 : 请问如何重新输出一个文件,去掉这些重复行。 : 首先采纳的意见给包子 :-) : 谢谢
|
cd 发帖数: 32 | 7 ZeeGee这个不work
% cat test
1|2|3|4
1|3|2|4
1|2|5|6
3|2|1|4
% grep -v "^\(.*\)|\1" test
1|2|3|4
1|3|2|4
1|2|5|6
3|2|1|4 |
cd 发帖数: 32 | 8 corwell这个在sun os下出错
% uname
SunOS
% awk -F'|' '{key=$1"|"$2}!(key in a){a[key]=1;print}' test
awk: syntax error near line 1
awk: bailing out near line 1 |
c******l 发帖数: 36 | 9 oh, you need gawk, or how about perl with the same logic:
perl -F'\|' -alne '$k="$F[0]|$F[1]"; print if!$seen{$k}; $seen{$k}=1' file
【在 cd 的大作中提到】![](/moin_static193/solenoid/img/up.png) : corwell这个在sun os下出错 : % uname : SunOS : % awk -F'|' '{key=$1"|"$2}!(key in a){a[key]=1;print}' test : awk: syntax error near line 1 : awk: bailing out near line 1
|
Z****e 发帖数: 2999 | 10 I think this will reduce those "duplicate" lines to 1 line, but will not
remove.
to remove, really need to scan the file twice
【在 c******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : oh, you need gawk, or how about perl with the same logic: : perl -F'\|' -alne '$k="$F[0]|$F[1]"; print if!$seen{$k}; $seen{$k}=1' file
|
|
|
cd 发帖数: 32 | 11 ZeeGee is right.
perl -F'\|' -alne '$k="$F[0]|$F[1]"; print if!$seen{$k}; $seen{$k}=1' file
will only remove the last instance.
%perl -F'\|' -alne '$k="$F[0]|$F[1]"; print if!$seen{$k}; $seen{$k}=1' test
1|2|3|4
1|3|2|4
3|2|1|4
I hope two of them be removed.
How can I scan the file twice? |
c******l 发帖数: 36 | 12 oh, I thought you were trying to do the uniqueness.
test
【在 cd 的大作中提到】![](/moin_static193/solenoid/img/up.png) : ZeeGee is right. : perl -F'\|' -alne '$k="$F[0]|$F[1]"; print if!$seen{$k}; $seen{$k}=1' file : will only remove the last instance. : %perl -F'\|' -alne '$k="$F[0]|$F[1]"; print if!$seen{$k}; $seen{$k}=1' test : 1|2|3|4 : 1|3|2|4 : 3|2|1|4 : I hope two of them be removed. : How can I scan the file twice?
|
Z****e 发帖数: 2999 | 13 create a tmp file, repeat the original file twice, but put a special marker
in the middle, then check for the special marker
say the marker is "---|---", then the cmd will be
perl -F'\|' -alne '$k="$F[0]|$F[1]"; print if $seen{$k}==1 && $seen{"---|---
"}; $seen{$k}++' file
that is, your original file is not too huge...
test
【在 cd 的大作中提到】![](/moin_static193/solenoid/img/up.png) : ZeeGee is right. : perl -F'\|' -alne '$k="$F[0]|$F[1]"; print if!$seen{$k}; $seen{$k}=1' file : will only remove the last instance. : %perl -F'\|' -alne '$k="$F[0]|$F[1]"; print if!$seen{$k}; $seen{$k}=1' test : 1|2|3|4 : 1|3|2|4 : 3|2|1|4 : I hope two of them be removed. : How can I scan the file twice?
|
c******l 发帖数: 36 | 14 how about this one:
perl -F'\|' -alne '
$k="$F[0]|$F[1]"; $seen{$k}++; $d{$k}="$.|$_";
}{print$d{$_} for grep{$seen{$_}==1}keys %seen
' file | sort -nk1 | sed 's/^[^|]*|//'
test
【在 cd 的大作中提到】![](/moin_static193/solenoid/img/up.png) : ZeeGee is right. : perl -F'\|' -alne '$k="$F[0]|$F[1]"; print if!$seen{$k}; $seen{$k}=1' file : will only remove the last instance. : %perl -F'\|' -alne '$k="$F[0]|$F[1]"; print if!$seen{$k}; $seen{$k}=1' test : 1|2|3|4 : 1|3|2|4 : 3|2|1|4 : I hope two of them be removed. : How can I scan the file twice?
|
cd 发帖数: 32 | |
n******t 发帖数: 4406 | 16 man uniq
【在 cd 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 一个文件有多行, 每一行都是|隔开的多个field, 比如: : field1|field2|field3|field4|field5 : 对任何两行,如果前两field值一样,则认为是重复行。 : 请问如何重新输出一个文件,去掉这些重复行。 : 首先采纳的意见给包子 :-) : 谢谢
|
s******s 发帖数: 508 | 17 You didn't even read the post.
Too simple.
【在 n******t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : man uniq
|
n******t 发帖数: 4406 | 18 Got your purse stolen today??
Otherwise, calm down dude.
【在 s******s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : You didn't even read the post. : Too simple.
|