unix console:如何删除其他行中包含的行

时间:2015-07-30 08:36:03

标签: unix console command-line-tool

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

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

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

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

1 个答案:

答案 0 :(得分: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
}