[NTLUG:Discuss] Short script question
Bobby Wrenn
bobby at wrennest.com
Tue May 4 18:12:07 CDT 2010
Fred James wrote:
> Bobby Wrenn wrote:
>> Fred James wrote:
>>> Bobby Wrenn wrote:
>>>> Bobby Wrenn wrote: (omissions for brevity)
>>>>> read a line into a buffer 1
>>>>> find another line that matches the regex of the line in buffer 1
>>>>> put it in buffer 2
>>>>> find another line that matches the regex of the line in buffer 1
>>>>> put it in buffer 3
>>>>> recurs to end of file
>>>>> append all the buffered lines to another file
>>>>> clear the buffer
>>>>> go to the next line and do it again until the end of the file
>>>>>
>>>>> The file is tab delimited and the regex will get the first word
>>>>> the first tab the next word space and the first three
>>>>> character/numbers of the next word as the search criteria. The
>>>>> rest of the line will be any character. The part to match will be
>>>>> everything up to the first three characters of the second word
>>>>> after the first tab.
>>>>>
>>>>> Can someone point me in the right direction? Perhaps an on line
>>>>> tutorial that might cover something like this. I've looked at sed
>>>>> and awk but all the examples I can find expect that you want to
>>>>> remove duplicates.
>>>>>
>>>>> Thanks in advance
>>>>> Bobby Wrenn
>>>> Starting to answer my own question. I have the regex that will
>>>> select the line
>>>> ^([A-Z|0-9]+\t)([A-Z|0-9]+ [A-Z|0-9][A-Z|0-9][A-Z|0-9]).*
>>>> So I can search for a match to \1 but then I have to copy the rest
>>>> of the line that does not match \2 then append both lines to a
>>>> file, and recurs.
>>> Bobby Wrenn
>>> 'grep' should do what you want in terms of writing all (complete
>>> lines) wherein a match is found ... so ... maybe you could ...
>>> (1) read the part(s) of the lines in the original file that you
>>> want to match into a "pattern_file"
>>> (2) use grep with the -f option to use the pattern_file, and
>>> maybe the -n to get line numbers as well
>>> ???
>>> Hope this helps - or did I miss the point all together?
>>> Regards
>>> Fred James
>> I'm not sure I am explaining it well.
>> ^([A-Z|0-9]+\t[A-Z|0-9]+ [A-Z|0-9][A-Z|0-9][A-Z|0-9]).*
>> Everything within the parentheses is what I want to match. The .*
>> selects the rest of the line.
>> What I am trying to do is cull from a list of 53K records all those
>> records which have the same data in the first part of the line then
>> output/append both or multiple lines where the first part matches to
>> another file.
> Bobby Wrenn
> What I am picking up on this time around - sorry if I missed it the
> first time - is "What I am trying to do is cull from a list of 53K
> records all those records which have the same data in the first part
> of the line then output/append both or multiple lines where the first
> part matches to another file." I believe I would use AWK for that,
> but several languages could do the same thing ... something like this ...
> starting with n = 1, increment n with each iteration
> read line n
> sarting with m = n + 1, increment m with each iteration
> read line m
> if regex(m) = regex(n)
> if m = n + 1
> append line n to new_file
> append line m to new_file
>
> Once new_file is complete, use grep -vf to get those lines out of the
> original file ... something like ...
> grep -vf new_file original_file > temporary_file
> ... then rename original_file to hold_file, and rename temporary_file
> to original_file, and test your result ... if something failed, rename
> hold_file to original_file and you are back at square 1
> OK? Or have I missed it again?
>
> Somehow I think all I may have done is restate your original message,
> which would mean that I may not have answered your question?
> Regards
> Fred James
>
>
> _______________________________________________
> http://www.ntlug.org/mailman/listinfo/discuss
>
>
Pretty close. Only what I want is a new file with all the lines where
the regex matches more than one line. I don't want to remove duplicates
I want a list of line where the first part of the line is duplicated in
more than one line.
Regards,
Bobby
More information about the Discuss
mailing list