#awk #sed #notepad
#awk #sed #notepad
Вопрос:
У меня есть файл .sql с более чем 1000000 строк. Мне нужно удалить строки, содержащие более X символов в третьем «столбце» (столбцы разделены запятой)
Я попытался использовать некоторые VI, SED и AWK. Также Notepad , но ни в одном из них не удалось добиться успеха
(255500, 0, '0093', 0.4350, 0.4350 ) - Keep this
(255501, 0, '0035521160', 0.4350, 0.4350 ) < - Delete this
Слова в третьем столбце, разделенные запятой, которые содержат менее 8 символов, я хочу сохранить строку, те, которые длиннее 8, мне нужно удалить всю строку.
Я попытался удалить вручную, но строк слишком много
Комментарии:
1. Ваш файл действительно выглядит так? Пожалуйста, отредактируйте свой вопрос, чтобы показать, как именно выглядит ваш файл
2. Вы получите гораздо более дружелюбный прием и гораздо лучшую помощь, если покажете, какой код вы пробовали до сих пор, каким бы неадекватным он ни был, и опишите, какие проблемы у вас возникли с ним. Без кода ваш вопрос выглядит как запрос на бесплатную консультацию, и многим это не нравится.
3. Вы упомянули @Raul Chiarella, что вы пробовали несколько вещей, мы всегда призываем людей публиковать свои усилия в своем посте, поэтому, пожалуйста, добавьте их (вместе с ответами на вопросы, заданные в комментариях пользователями) и сообщите нам об этом.
4.
awk -F'[ ,] ' '(length($3)-2)<8' filename
может быть то, что вы ищете. Но ваш входной файл, похоже, на самом деле не соответствует шаблону. Например, у вас нет разделителей между открывающей скобкой и первым полем, но у вас есть один между последним полем и закрывающей скобкой.5. Это выглядит как часть инструкции SQL INSERT, поэтому для тех, кто спрашивает: «Да, вероятно, это так и выглядит». Строки будут заключены в одинарные кавычки. Рауль, это должно быть только для строк, которые начинаются со скобок (или любых других правил)? В противном случае, не могли бы вы вставить все это в другую таблицу, а затем отфильтровать? Конечно, это было бы более разумно.
Ответ №1:
Если это не все, что вам нужно, отредактируйте свой вопрос, чтобы уточнить ваши требования и предоставить более репрезентативный образец ввода / вывода:
$ awk -F, 'length($3)<8' file
(255500, 0, '0093', 0.4350, 0.4350 ) - Keep this
Ответ №2:
если ваши данные в файле ‘d’, попробуйте gnu sed:
sed -E '/^[^,] ,[^,] ,s*[^,]{9,}/d' d
добавьте опцию -i, чтобы действительно отредактировать ее; sed -Ei
…
Ответ №3:
Попробуйте с этим:
Поиск: ^[^,] ,[^,] ,s*'[^']{8,}'.*R?
Заменить на: (nothing)
Это должно работать даже при добавлении пробелов между данными столбца:
(255501, 0, '12345678', 0.4350, 0.4350 )
У вас есть демо здесь