используйте регулярное выражение и awk / sed для удаления строк со столбцами, содержащими 4 или более повторяющихся символа - PullRequest
0 голосов
/ 08 мая 2020

У меня есть данные, в которых один из столбцов, представляющих собой строку, содержит повторяющиеся символы, и я хочу удалить, если в этом столбце есть 4 или более последовательных повторяющихся символа. "ww wwww", "((((", "))))", "a bbbb", и я хочу удалить все такие строки с 4 или более повторяющимися символами. Я пробовал вариант awk -F $'\t' '$1 ~ ([a-z])\1{3}| (/()\1{3} {print $0}' input.txt, но это не так. работай.

apps    -1  qqqq
apps    -1  ((( ((((
apps    -1  spotify
apps    -1  side
apps    -1  pp

, и я хочу, чтобы результат был

apps    -1  spotify
apps    -1  side
apps    -1  pp

Ответы [ 2 ]

3 голосов
/ 08 мая 2020

Если первые два столбца - это всегда то, что вы показываете в примере, вы можете использовать это:

 grep -vE '([[:graph:]])\1\1\1' input.txt

Это исключает любую строку, которая имеет графический символ четыре раза подряд. (.)\1\1\1 не работает, поскольку соответствует четырем пробелам.

В качестве альтернативы, на один символ короче:

 grep -vE '([[:graph:]])\1{3}' input.txt
2 голосов
/ 08 мая 2020

Эта gnu sed команда должна работать:

sed -E '/([^[:blank:]])\1{3}/d' file

apps    -1  spotify
apps    -1  side
apps    -1  pp

или же вы можете использовать командную строку perl также:

perl -ne 'print if $_ !~ /(\S)\1{3}/' file

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