首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从文件/grep中删除重复行

从文件/grep中删除重复行
EN

Stack Overflow用户
提问于 2009-09-17 16:11:29
回答 9查看 23.5K关注 0票数 3

我想删除所有第二列05408736032都相同的行

0009300|05408736032|89|01|001|0|0|0|1|NNNNNNYNNNNNNNNN|asdf| 0009367|05408736032|89|01|001|0|0|0|1|NNNNNNYNNNNNNNNN|adff|

这些行不是连续的。删除所有行是很好的。我不需要把他们中的任何一个留在身边。

对不起,我的unix fu由于不使用而变得很弱:)。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-09-17 17:37:27

如果列的宽度不固定,您仍然可以使用排序:

代码语言:javascript
复制
sort -t '|' --key=10,10 -g FILENAME

  1. -t标志将设置分隔符。
  2. -g仅用于自然数字排序。
票数 1
EN

Stack Overflow用户

发布于 2009-09-17 16:25:24

如果所有输入数据的格式都是如上所述-即固定大小的字段-并且输出中行的顺序并不重要,那么sort --key=8,19 --unique应该可以做到这一点。如果顺序很重要,但重复行始终是连续的,则uniq -s 8 -w 11将起作用。如果字段不是固定宽度的,但重复行始终是连续的,则Pax的awk脚本将起作用。不过,在最一般的情况下,对于一行程序来说,我们可能会看到一些稍微复杂的东西。

票数 9
EN

Stack Overflow用户

发布于 2009-09-17 16:23:33

假设它们是连续的,并且您想要删除后续的,下面的awk脚本将执行此操作:

代码语言:javascript
复制
awk -F'|' 'NR==1 {print;x=$2} NR>1 {if ($2 != x) {print;x=$2}}'

它的工作方式是打印第一行并存储第二列。然后,对于后续行,它跳过存储值与第二列相同的行(如果不同,则打印该行并更新存储值)。

如果它们不是连续的,我会选择Perl解决方案,其中您维护一个关联数组来检测和删除重复项-我会编写它,但我的3yo女儿刚刚醒来,现在是午夜,她着凉了-明天见,如果我能挺过晚上的话:-)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1439816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档