由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Linux版 - Unix/Linux 命令行如何去除文本的重复行
相关主题
命令行下咋回到历史目录啊?mutt怎样打印中文邮件?
诡异加用户问题Linux有待完善的小缺陷的累记
面试中的unix, linux的几个问题,不知道自己答对了没有。请教ubuntu问题
请麻烦推荐好的 Weblog analyzer tools (offline).精华区有新手指南吗?没找到
nvidia就是比ati强为什么bash file执行的结果与直接在命令行执行的结果不一样
万佛,请推荐word frequency tool? (转载)终于全部命令行了
self test: awk question有什么工具可以命令行方式压缩pdf文件吗?
讨论:linux终端下的表格数据处理?一个简单的ubuntu问题,求助
相关话题的讨论汇总
话题: seen话题: alne话题: file话题: test话题: perl
进入Linux版参与讨论
1 (共1页)
cd
发帖数: 32
1
一个文件有多行, 每一行都是|隔开的多个field, 比如:
field1|field2|field3|field4|field5
对任何两行,如果前两field值一样,则认为是重复行。
请问如何重新输出一个文件,去掉这些重复行。
首先采纳的意见给包子 :-)
谢谢
Z****e
发帖数: 2999
2
grep -v "^\(.*\)|\1"

【在 cd 的大作中提到】
: 一个文件有多行, 每一行都是|隔开的多个field, 比如:
: field1|field2|field3|field4|field5
: 对任何两行,如果前两field值一样,则认为是重复行。
: 请问如何重新输出一个文件,去掉这些重复行。
: 首先采纳的意见给包子 :-)
: 谢谢

l*****n
发帖数: 633
3
每一行field个数都一样吗?

【在 cd 的大作中提到】
: 一个文件有多行, 每一行都是|隔开的多个field, 比如:
: field1|field2|field3|field4|field5
: 对任何两行,如果前两field值一样,则认为是重复行。
: 请问如何重新输出一个文件,去掉这些重复行。
: 首先采纳的意见给包子 :-)
: 谢谢

Z****e
发帖数: 2999
4
看错了。。。以为是filter掉前两个field一样的行...

【在 Z****e 的大作中提到】
: 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 的大作中提到】
: 一个文件有多行, 每一行都是|隔开的多个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 的大作中提到】
: 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 的大作中提到】
: 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

相关主题
万佛,请推荐word frequency tool? (转载)mutt怎样打印中文邮件?
self test: awk questionLinux有待完善的小缺陷的累记
讨论:linux终端下的表格数据处理?请教ubuntu问题
进入Linux版参与讨论
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 的大作中提到】
: 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 的大作中提到】
: 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 的大作中提到】
: 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
15
这个可以了。 马上包子奉上 thanks.
n******t
发帖数: 4406
16
man uniq

【在 cd 的大作中提到】
: 一个文件有多行, 每一行都是|隔开的多个field, 比如:
: field1|field2|field3|field4|field5
: 对任何两行,如果前两field值一样,则认为是重复行。
: 请问如何重新输出一个文件,去掉这些重复行。
: 首先采纳的意见给包子 :-)
: 谢谢

s******s
发帖数: 508
17
You didn't even read the post.
Too simple.

【在 n******t 的大作中提到】
: man uniq
n******t
发帖数: 4406
18
Got your purse stolen today??
Otherwise, calm down dude.

【在 s******s 的大作中提到】
: You didn't even read the post.
: Too simple.

1 (共1页)
进入Linux版参与讨论
相关主题
一个简单的ubuntu问题,求助nvidia就是比ati强
命令行下面有什么对中文支持好一些的ftp软件么?万佛,请推荐word frequency tool? (转载)
不容易呀,一年没关机了self test: awk question
Ubuntu 怎么让命令行提示符现实部分当前路径 比如最后3层讨论:linux终端下的表格数据处理?
命令行下咋回到历史目录啊?mutt怎样打印中文邮件?
诡异加用户问题Linux有待完善的小缺陷的累记
面试中的unix, linux的几个问题,不知道自己答对了没有。请教ubuntu问题
请麻烦推荐好的 Weblog analyzer tools (offline).精华区有新手指南吗?没找到
相关话题的讨论汇总
话题: seen话题: alne话题: file话题: test话题: perl