Удалить всю строку, если определенное слово длиннее X символов, слова в строке разделены запятой - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть файл .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, мне нужныудалить всю строку.

Я пытался удалить вручную, но слишком много строк

Ответы [ 3 ]

2 голосов
/ 15 апреля 2019

Если это не все, что вам нужно, отредактируйте ваш вопрос, чтобы уточнить ваши требования и предоставить более по-настоящему репрезентативный пример ввода / вывода:

$ awk -F, 'length($3)<8' file
(255500, 0, '0093', 0.4350, 0.4350 ) - Keep this
0 голосов
/ 16 апреля 2019

Попробуйте с этим:

Поиск: ^[^,]+,[^,]+,\s*'[^']{8,}'.*\R?

Заменить на: (nothing)

Должно работать даже при добавлении пробелов между данными столбца:

(255501, 0,          '12345678', 0.4350, 0.4350 )

У вас есть демо здесь

0 голосов
/ 16 апреля 2019

если ваши данные в файле 'd', попробуйте gnu sed:

sed -E '/^[^,]+,[^,]+,\s*[^,]{9,}/d' d

добавить опцию -i, чтобы действительно отредактировать ее; sed -Ei ...

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