Есть ли более эффективный способ удаления строк с недопустимым/слишком длинным 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
и отдельную строку под заголовком с надписьюRemove
— упростите нам понимание и тестирование, а просто публикуйте один блок строк ввода и один файл ожидаемых выходных строк с учетом этого ввода. Я обновил ваш вопрос, чтобы показать, что я имею в виду. - person Ed Morton   schedule 04.09.2020xn--
в качестве префикса, НЕ являются недействительными TLD. Это ИДИ. Что бы вы ни делали, не ставьте ограничений по длине меток, в этом нет смысла. - person Patrick Mevzek   schedule 05.09.2020