【发布时间】:2020-09-04 15:38:52
【问题描述】:
是否有更有效的方法来删除包含无效/过长 tld(顶级域)的行?我对 sed / awk 效率不高。在最后一个句点之后,我想从文件中删除超过 24 个字符的行。
我写的东西很有效,但在长列表上非常慢。它获取每一行,计算句点后的字符数,将超过 24 个字符的行保存到列表中,然后从源中删除它们。
示例输入:
test.sub.xn--vermgensberatung-pwb
test.sub.xn--vermgensberatung-pwba
预期输出:
test.sub.xn--vermgensberatung-pwb
我当前的代码:
Source='/tmp/source'
while read -r Line || [[ -n "$Line" ]]; do
count="$(echo "$Line" | awk -F. '{ print $NF }' | awk '{ print length }')" #Count length after period
if [[ "$count" -gt '24' ]]; then echo "$Line" >> /tmp/filter; fi #Save long TLD lines
done < "$Source"
#Remove results from source
cat /tmp/filter | sort > /tmp/filter.clean
comm -23 "$Source" /tmp/filter.clean > /tmp/clean
【问题讨论】:
-
您不应该使用公共后缀列表而不是仅仅尝试按长度限制吗?
-
发布示例输入/输出时,不要在
Keep标题下发布 1 行,在Remove标题下单独发布一行 - 让我们更容易理解和测试并只发布一个输入行块和一个给定输入的预期输出行文件。我更新了你的问题以表明我的意思。 -
您提供的以
xn--为前缀的示例不是无效的顶级域名。它们是 IDN。无论你做什么,都不要对标签进行长度限制,这是没有意义的。 -
@Mevzek - 从列表中删除无效 TLD 的最佳方法是什么 - 超过 100 万行?
标签: linux bash awk sed domain-name