【发布时间】: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
我有一个包含排序路径的文本文件,例如
/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
使用awk 和tac(反向连接和打印文件):
$ 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
}
【讨论】: