【问题标题】:unix console: how to delete lines that contained in other linesUnix控制台:如何删除其他行中包含的行
【发布时间】:2015-07-30 08:36:03
【问题描述】:

我有一个包含排序路径的文本文件,例如

/abc
/abc/def
/abc/jkl
/def
/def/jkl
/def/jkl/yui
/def/xsd
/zde

现在我想删除包含在其他行中的行,在这种情况下,以下行应该保留:

/abc/def
/abc/jkl
/def/jkl/yui
/def/xsd
/zde

【问题讨论】:

    标签: unix console command-line-tool


    【解决方案1】:

    使用awktac(反向连接和打印文件):

    $ tac test.txt | awk '{ if (substr(prev, 1, length($0)) != $0) print $0; prev = $0}' | tac
    /abc/def
    /abc/jkl
    /def/jkl/yui
    /def/xsd
    /zde
    

    这是一个更易读的 awk 版本:

    {
        if (substr(prev, 1, length($0)) != $0)  # Compare with last line (substring?)
            print $0;
        prev = $0  # Remember the last line
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      相关资源
      最近更新 更多