【问题标题】:Delete matching sequential rows删除匹配的连续行
【发布时间】:2013-12-16 05:01:31
【问题描述】:

目前我有一个这样的 csv 文件:

11:00 p.m.
11:00 p.m.
03:00 p.m.
03:00 p.m.
05:00 a.m.
05:00 a.m.
07:00 a.m.
12:00 p.m.
07:00 a.m.
05:00 a.m.

我想删除连续行中的重复项,因此输出将是这样的:

11:00 p.m.
03:00 p.m.
05:00 a.m.
07:00 a.m.
12:00 p.m.
07:00 a.m.
05:00 a.m.

我不想删除所有重复项,只删除连续行中的重复项,例如,如果第 4 行和第 5 行匹配,则删除其中一个重复行。有没有不需要运行 for 循环的简单方法?

【问题讨论】:

    标签: bash csv sed awk grep


    【解决方案1】:

    试试uniq

    它可以做你想做的事情。

    【讨论】:

    • 哇,这实际上效果很好,而且非常简单……我以为 uniq 删除了所有重复项?
    • 查看手册页:从 INPUT(或标准输入)过滤相邻的匹配行,写入 OUTPUT(或标准输出) 如果没有选项,匹配行将合并到第一个匹配项。
    • 有没有办法只对前 10 行执行此操作?
    【解决方案2】:

    awk '$0 != prev; {prev=$0}' file.txt
    

    【讨论】:

    • 这也很好用!感谢您今天回答我所有的问题!
    • @user2143205,感谢您给我这个机会。我今天学到了一些我以前不知道的关于uniq 的东西:-)
    • 有没有办法限制 awk 使用此命令检查的行数?
    • @user2143205,您可以使用uniq 轻松做到这一点,就像这样 - head -10 file | uniq
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    相关资源
    最近更新 更多