2013-07-05 54 views
0

我有一个包含200,000多行的文件。第一个字段是密钥ID。我需要删除重复第一个字段的2,3,4行。请帮助!我在限期之内。我已经尝试了很多类似回答的问题,但都没有成功。使用awk删除第一个字段的重复内容

+2

首先:为什么你的最后期限要求您使用'awk',特别是?有没有一些要求,你没有提及?其次:为了确保清楚你想要什么,请张贴一些样本输入和输出。 – ruakh

+0

请举例说明!你的文件是否已分类?你只是想删除重复(col 1基础)线? – Kent

+3

问题必须**表明对正在解决的问题的最小理解**。告诉我们你试图去做什么,为什么它没有工作,以及它应该如何工作。另请参阅:[堆栈溢出问题清单](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)。 – Endoro

回答

0

这是做你想做的吗?

print -- " 
1 
1 
1 
2 
2 
2 
3 
3 
3 
4" | awk '{ if (! ($1 in alreadyPrinted)) {print $1 ; alreadyPrinted[$1]=$1;}' 

输出

1 
2 
3 
4 

如果没有,请大家及时补充小样本输入,并显示基于该输入所需的输出。如果你做了一些代码,包括它,并包含你得到的错误消息的确切文本。

IHTH

+0

由于这个问题特别提到了第一个字段,所以在整个过程中使用'$ 1'而不是'$ 0'可能是有意义的。如果文件被排序,你只需要一个变量,而不是一个数组。 – tripleee

+0

约1美元的好主意。不清楚数据是否被排序。我最低限度的解决方案是为了帮助O.P.想象我们需要真正理解问题。谢谢,祝你好运。 – shellter

2

代码GNU

sed -nr '1{h;s/\s*(\S+).*/\1/;x;p}; 1!{x;G;/(\S+)\n\1.*/!{s/\n.*//;x;p;b};s/\n.*//;x;d}' file.txt 
 
$cat file.txt 
line1 11111 
line2 22121 
line1 11212 
line2 22222 
line1 11313 
line2 22323 
line1 11414 
line2 22424 
line1 11515 
line2 22525 

$sed -nr '1{h;s/\s*(\S+).*/\1/;x;p}; 1!{x;G;/(\S+)\n\1.*/!{s/\n.*//;x;p;b};s/\n.*//;x;d}' file.txt 
line1 11111 
line2 22121 
line2 22222 
line2 22323 
line2 22424 
line2 22525 
相关问题