Как удалить строки из файла с определенной строкой в ​​фиксированной позиции в Unix - PullRequest
0 голосов
/ 14 сентября 2018

Я новичок в скриптинге, и у меня есть эта проблема:
У меня есть один файл, который содержит более 100 тысяч записей.Мне нужно удалить некоторые записи из моего файла на основе определенной позиции. Например, если в позициях с 38 по 45 присутствует «AB123», то эту строку следует удалить из файла перед запуском загрузчика sql.

Может кто-нибудь, пожалуйстаПомоги мне .

1 Ответ

0 голосов
/ 15 сентября 2018

Вы должны протестировать решение с меньшим файлом. Я сделал тестовый файл с

for ((i=0;i<50;i++)); do echo "$((i%11))exampleABC123..$i" ; done > inputfile

Каждая 11-я строка на одну позицию длиннее, и ABC начинается с позиции 10 на этих строках. Как удалить только эти строки?
Вы начинаете считать с начала (^), принимаете 9 случайных символов (.{9}), за которыми следует строка, которая должна соответствовать, и удаляете их (/d)

sed -r '/^.{9}ABC123/d' inputfile

Когда у вас больше правил, поисковое выражение становится более сложным.
Предположим, вы также хотите удалить строки, начинающиеся с 5 или заканчивающиеся на 9.

sed -r '/^.{9}ABC123|^5|9$/d' inputfile

Если у вас есть больше правил, создайте файл конфигурации (и добавьте комментарий), как этот файл exclude.sed

/^.{9}ABC123/d # Search for ABC123 on position 10
/^5/d # Lines starting with a 5
/9$/d # Lines finishing with a 9

Теперь проанализируйте ваш ввод с правилами, указанными в вашей конфигурации

sed -rf exclude.sed inputfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...