Как получить строки из файла, где определенная строка повторяется более одного раза в каждой строке? - PullRequest
0 голосов
/ 13 октября 2011

У меня есть файл, как показано ниже (файл примера).

10, Боб, элек, Боб, герой ,,

20, Боб, механ, стив, Juni ,,, Yumm

30, Боб, инстр, Боб, сено

40, Боб, привилегия, Алекс, Juni, Сия ,,

50, Боб, Хим, Боб, Боб, сени

Мне понадобятся все строки, в которых строка Боб появляется более одного раза в каждой строке .

Также, если это не файл с разделителями, как указано выше, и если это файл, подобный приведенному ниже, то как получить строки, в которых повторяется определенная строка ( В этом случае Боб )

10, Боб, elecBob, герой ,,

20, Боб, механ, стив, Juni ||| Боб, yummBob

30, BobExtarvagnaxz |||

Я попробовал пару вариантов, но не закончил, что именно требуется.

Спасибо Chethan

Ответы [ 4 ]

1 голос
/ 13 октября 2011

Следующая строка будет распечатывать каждую строку, где любая 3-х или более строк символов повторяется на одной и той же строке (если строка для сопоставления должна быть длиннее, просто вставьте больше точек в скобках):

 $ grep '\(....*\).*\1' testdat

с учетом следующего входного файла:

 hahaAliAlihehe
 Ali ist allein
 Ali, Alibaba, Alimente
 Bert, Bertha, Bertram
 Holger, V'ger, Ludger
 Susi,Bernd,Holger

печатает:

 hahaAliAlihehe
 Ali, Alibaba, Alimente
 Bert, Bertha, Bertram
 Holger, V'ger, Ludger
1 голос
/ 13 октября 2011

Вы можете использовать регулярное выражение.

Если у вас есть файл с разделителями-запятыми, вы можете найти одного Боба, а затем другого Боба, используя:

grep -E "(^|,)Bob,.*Bob(,|$)" file.txt

Если файл не разделен, вы можете использовать более общее регулярное выражение, например:

grep -E "^.*Bob.*Bob.*$" file.txt

Но это может работать неправильно, если у вас есть строка типа Bob,steve,Bobby, потому что она не знает, как различить Боба и Бобби.

1 голос
/ 13 октября 2011

Это удалит все строки, не имеющие нескольких Бобов.

sed '/Bob.*Bob/!d' filename
1 голос
/ 13 октября 2011
Строка

, начинающаяся с 20 на вашем выходе, не равна 20 на входе. А почему 30,50 на входе не на выходе? у них есть более одного "Боба".

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

 awk '/.*(Bob).*(Bob).*/' yourFile
...