Как удалить строку, если строка присутствует в строке дважды - PullRequest
0 голосов
/ 28 ноября 2018

Мне нужно удалить все строки, которые содержат строку дважды в одной строке.

Пример:

hi 
hi hello
hi hello hey
hey hi:hello:hi #delete this line

Результат: поскольку в последней строке дважды содержится слово "hi".Строка не разделена должным образом каким-либо фиксированным разделителем, иногда это пробел, запятая или двоеточие, или может быть что угодно.

hi 
hi hello
hi hello hey

Если бы это были фиксированные данные на основе столбцов, я мог бы использовать: (грубая идея)

awk '{for(i=1;i<=NF;i++) if($i ~/hi/) c++ ;if(c<2) print $0}'

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Вы можете сделать это:

awk -F'[ :;,]' '{ delete seen; for(i=1; i<=NF; i++) {seen[$i]++} # parse words and store in a hash             
       for(i in seen) if(seen[i] == 2) {next}                    # skip line if it has a word that is repeated two times
     }1' file
0 голосов
/ 28 ноября 2018

это может быть проще с sed

$ sed -E '/(\b\w+\b).*\b\1\b/d' file

, если слово повторяется, удалить строку.Вы должны определить слово с границами слова, иначе любой повторяющийся символ будет соответствовать регулярному выражению.

0 голосов
/ 28 ноября 2018

Не могли бы вы попробовать следующее.

awk -F'[ :#]' '{for(i=1;i<=NF;i++){if(++a[$i]>1){delete a;next}};delete a} 1'   Input_file

Вывод будет следующим.

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