unix 控制台:如何删除包含在其他行中的行
unix console: how to delete lines that contained in other lines
我有一个包含排序路径的文本文件,例如
/abc
/abc/def
/abc/jkl
/def
/def/jkl
/def/jkl/yui
/def/xsd
/zde
现在我想删除包含在其他行中的行,在这种情况下应保留以下行:
/abc/def
/abc/jkl
/def/jkl/yui
/def/xsd
/zde
使用 awk
和 tac
(反向连接和打印文件):
$ tac test.txt | awk '{ if (substr(prev, 1, length([=10=])) != [=10=]) print [=10=]; prev = [=10=]}' | tac
/abc/def
/abc/jkl
/def/jkl/yui
/def/xsd
/zde
这是一个更易读的 awk 版本:
{
if (substr(prev, 1, length([=11=])) != [=11=]) # Compare with last line (substring?)
print [=11=];
prev = [=11=] # Remember the last line
}
我有一个包含排序路径的文本文件,例如
/abc
/abc/def
/abc/jkl
/def
/def/jkl
/def/jkl/yui
/def/xsd
/zde
现在我想删除包含在其他行中的行,在这种情况下应保留以下行:
/abc/def
/abc/jkl
/def/jkl/yui
/def/xsd
/zde
使用 awk
和 tac
(反向连接和打印文件):
$ tac test.txt | awk '{ if (substr(prev, 1, length([=10=])) != [=10=]) print [=10=]; prev = [=10=]}' | tac
/abc/def
/abc/jkl
/def/jkl/yui
/def/xsd
/zde
这是一个更易读的 awk 版本:
{
if (substr(prev, 1, length([=11=])) != [=11=]) # Compare with last line (substring?)
print [=11=];
prev = [=11=] # Remember the last line
}