Mate Mrše
Mate Mrše

Reputation: 8394

Remove all but the first line containing a given string

I have a log file called duration.log with output such as

2021-04-15 20:25:45.639181: --- DURATION: 0:00:02.928309 --- ROUTE NAME: 210415-821-PK-JDoe --- HEADLESS: 0 --- 
2021-04-15 20:25:48.756914: --- DURATION: 0:00:03.000727 --- ROUTE NAME: 210415-821-PK-JDoe --- HEADLESS: 0 --- 
2021-04-15 20:25:51.948027: --- DURATION: 0:00:03.068122 --- ROUTE NAME: 210415-821-PK-JDoe --- HEADLESS: 0 --- 
2021-04-15 20:25:55.075158: --- DURATION: 0:00:02.987064 --- ROUTE NAME: 210415-821-PK-JDoe --- HEADLESS: 0 --- 
2021-04-15 20:25:58.274715: --- DURATION: 0:00:03.063948 --- ROUTE NAME: 210415-821-PK-JDoe --- HEADLESS: 0 --- 
2021-04-15 20:26:01.753367: --- DURATION: 0:00:03.273167 --- ROUTE NAME: 210415-821-PK-JDoe --- HEADLESS: 0 --- 
2021-04-15 20:26:05.001949: --- DURATION: 0:00:03.050073 --- ROUTE NAME: 210415-821-PK-JDoe --- HEADLESS: 0 --- 
2021-04-15 20:26:08.206065: --- DURATION: 0:00:03.073367 --- ROUTE NAME: 210415-821-PK-JDoe --- HEADLESS: 0 --- 
2021-04-16 09:03:24.188722: --- DURATION: 0:00:21.995238 --- ROUTE NAME: None --- HEADLESS: 0 --- 
2021-04-16 09:03:50.434883: --- DURATION: 0:00:26.140902 --- ROUTE NAME: None --- HEADLESS: 0 --- 
2021-04-16 09:04:18.552286: --- DURATION: 0:00:27.793468 --- ROUTE NAME: None --- HEADLESS: 0 --- 
2021-04-16 09:06:27.015632: --- DURATION: 0:00:33.688867 --- ROUTE NAME: 210416-829-PK-JDoe --- HEADLESS: 0 --- 
2021-04-16 09:07:10.487733: --- DURATION: 0:00:42.421573 --- ROUTE NAME: 210416-830-PK-JDoe --- HEADLESS: 0 --- 
2021-04-16 09:07:39.247244: --- DURATION: 0:00:28.391001 --- ROUTE NAME: 210416-831-PK-JDoe --- HEADLESS: 0 --- 
2021-04-16 09:08:06.292683: --- DURATION: 0:00:26.790946 --- ROUTE NAME: 210416-832-PK-JDoe --- HEADLESS: 0 --- 
2021-04-16 09:08:29.929427: --- DURATION: 0:00:19.462734 --- ROUTE NAME: 210416-833-PK-JDoe --- HEADLESS: 0 --- 
2021-04-16 09:08:53.306396: --- DURATION: 0:00:23.140965 --- ROUTE NAME: 210416-834-PK-JDoe --- HEADLESS: 0 --- 

I removed duplicate lines using awk '!seen[$0]++' duration.log found in How to delete duplicate lines in a file without sorting it in Unix?.

Now, how do I remove all but the first line containing the string 210415-821-PK-JDoe? Awk or other bash tools.

Update:

I'm looking for a following output:

2021-04-15 20:25:45.639181: --- DURATION: 0:00:02.928309 --- ROUTE NAME: 210415-821-PK-JDoe --- HEADLESS: 0 --- 
2021-04-16 09:03:24.188722: --- DURATION: 0:00:21.995238 --- ROUTE NAME: None --- HEADLESS: 0 --- 
2021-04-16 09:03:50.434883: --- DURATION: 0:00:26.140902 --- ROUTE NAME: None --- HEADLESS: 0 --- 
2021-04-16 09:04:18.552286: --- DURATION: 0:00:27.793468 --- ROUTE NAME: None --- HEADLESS: 0 --- 
2021-04-16 09:06:27.015632: --- DURATION: 0:00:33.688867 --- ROUTE NAME: 210416-829-PK-JDoe --- HEADLESS: 0 --- 
2021-04-16 09:07:10.487733: --- DURATION: 0:00:42.421573 --- ROUTE NAME: 210416-830-PK-JDoe --- HEADLESS: 0 --- 
2021-04-16 09:07:39.247244: --- DURATION: 0:00:28.391001 --- ROUTE NAME: 210416-831-PK-JDoe --- HEADLESS: 0 --- 
2021-04-16 09:08:06.292683: --- DURATION: 0:00:26.790946 --- ROUTE NAME: 210416-832-PK-JDoe --- HEADLESS: 0 --- 
2021-04-16 09:08:29.929427: --- DURATION: 0:00:19.462734 --- ROUTE NAME: 210416-833-PK-JDoe --- HEADLESS: 0 --- 
2021-04-16 09:08:53.306396: --- DURATION: 0:00:23.140965 --- ROUTE NAME: 210416-834-PK-JDoe --- HEADLESS: 0 --- 

Upvotes: 1

Views: 68

Answers (1)

RavinderSingh13
RavinderSingh13

Reputation: 133518

Could you please try following, based on your shown samples.

awk '/210415-821-PK-JDoe/ && ++count>1{next} 1'  Input_file

OR as per Sundeep's comment above could be written as:

awk '!/210415-821-PK-JDoe/ || !count++'  Input_file

Explanation: Adding detailed explanation for above.

awk '                                ##Starting awk program from here.
/210415-821-PK-JDoe/ && ++count>1{   ##checking condition if line contains 210415-821-PK-JDoe AND count is greater than 1 then do following.
  next                               ##next will skip all further statements from here.
}
1                                    ##1 will print current line here.
'  Input_file                        ##Mentioning Input_file name here.

Upvotes: 5

Related Questions