This is great so there is no need to use SED altogether. However, is it possible to include the record separator as part of the record as well? i.e. Jessica Smith 16/09/2000 Female.
Just to make the sample data a little more closer to the actual data which I am not able to review due to confidentiality reason which also include the pipe ”|” character as part of the record separator. For instance:
As a result, is it still possible to identify the last using RS=” L\|Employee.gender\|Male| L\|Employee.gender\|Female”, some way to search the second field ($2) of record separator instead of the whole line which is made up of pipe separated fields?
Apologies for coming up with a new record format which may annoy some moderators but we are very close to wrapping up this thread.
Thanks a lot,
George
---------- Post updated 06-24-12 at 12:41 AM ---------- Previous update was 06-23-12 at 08:31 PM ----------
Hi All,
Thank you so much to everyone for providing many suggestions including some that would have taken you quite some time to prepare.
Code:
Yes, I am using gawk on Solaris 10:
$ ls -lt /usr/local/bin/awklrwxrwxrwx 1 root root 4 Jun 5 2008 /usr/local/bin/awk -> gawk
Code:
Below is a brief set of the final sample input data - employee1.txt:
$ more employee1.txtL|Employee.firstname|JohnL|Employee.surname|BarryL|Employee.dob|21/04/1988L|Employee.gender|MaleL|Employee.firstname|JessicaL|Employee.surname|SmithL|Employee.dob|16/09/2000L|Employee.gender|FemaleL|Employee.firstname|JoyceL|Employee.surname|BrownL|Employee.dob|05/12/1985L|Employee.gender|FemaleL|Employee.firstname|KyleL|Employee.surname|JonesL|Employee.dob|02/10/1945L|Employee.gender|Male( i ) $ awk 'BEGIN { RS="L\|Employee.gender\|Male|L\|Employee.gender\|Female" } { if ($2 ~ /Smith/) { print $1, $2, $3 } }' employee1.txtawk: warning: escape sequence `\|' treated as plain `|'( ii ) $ awk 'BEGIN { RS="^*Employee.gender*$" } { if ($2 ~ /Smith/) { print $1, $2, $3 } }' employee.txt$ ( iii ) $ sed -n 'N;N;N;/\nL|Employee.surname|Smith\n.*\n.*$/p' employee1.txt | awk -F"|" '{ print $NF }'JessicaSmith16/09/2000Female( iv ) $ paste - - - - < employee1.txt | awk '{ if ($2 ~ /Smith/ && $4 ~ /Employee.gender/) { print $1 "\n" $2 "\n" $3 "\n" $4 } }' | awk -F"|" '{ print $NF }'JessicaSmith16/09/2000Female
In short, attempts ( i ) & ( ii ) failed by using regex in RS with gawk. On the other hand, ( iii ) & ( iv ) have been successful but may be simplified further where possible.
We are already there but you may like to improve on existing solutions. This would not have been possible without your help.
Hi All,
I need to select only those records having a non zero record in the first column of a comma delimited file.
Suppose my input file is having data like:
"0","01/08/2005 07:11:15",1,1,"Created",,"01/08/2005"
"0","01/08/2005 07:12:40",1,1,"Created",,"01/08/2005"... (2 Replies)
As part of a bigger task, I had to read thru a file and separate records into various batches based on a field. Specifically, separate records based on the value in the batch field as defined below. The batch field left-justified numbers.
The datafile is here
> cat infile
12345 1 John Smith ... (5 Replies)
Dear list
its my first post and i would like to greet everyone
What i would like to do is select records 7 and 11 from each files in a folder then run an executable inside the script for the selected parameters.
The file format is something like this
7 100 200
7 100 250
7 100 300 ... (1 Reply)
Hi everyone.
I am a newbie to Linux stuff. I have this kind of problem which couldn't solve alone. I have a text file with records separated by empty lines like this:
ID: 20
Name: X
Age: 19
ID: 21
Name: Z
ID: 22
Email: xxx@yahoo.com
Name: Y
Age: 19
I want to grep records that... (4 Replies)
i have a table
records
------------
id | user | time | event
91 admin | 12:00 | hi
92 admin | 11:00 | hi
93 admin | 12:00 | bye
94 admin | 13:00 | bye
95 root | 12:00 | hi
96 root | 12:30 | hi
97 root | 12:56 | hi
how could i only select and display only the user and event from... (6 Replies)
Hello:
I am new to shell script programming. Now I would like to select specific records block from a file. For example, current file "xyz.txt" is containing 1million records and want to select the block of records from line number 50000 to 100000 and save into a file. Can anyone suggest me how... (3 Replies)
Print only records from file 2 that do not match file 1 based on criteria of comparing column 1 and column 6
Was trying to play around with following code I found on other threads but not too successful
Code:
awk 'NR==FNR{p=$1;$1=x;A=$0;next}{$2=$2(A?A:",,,")}1' FS=~ OFS=~ file1 FS="*"... (11 Replies)
Friends,
I have data sorted on id like this
id addressl
1 abc
2 abc
2 abc
2 abc
3 aabc
4 abc
4 abc
I want to pick all ids with addressesses leaving out duplicate records. Desired output would be
id address
1 abc
2 abc
3 abc
4 abc (5 Replies)
Hi All
I would like to modify a file like this:
>antax gioq21 tris notes
abcdefghij
klmnopqrs
>betax gion32 ter notes2
tuvzabcdef
ahgskslsooin this:
>tris
abcdefghij
klmnopqrs
>ter
tuvzabcdef
ahgskslsoo
So, I would like to remove the first two fields(and output field 3) in record... (4 Replies)
I have a file, named records.txt, containing large number of records, around 0.5 million records in format below:
28433005 1 1 3 2 2 2 2 2 2 2 2 2 2 2
28433004 0 2 3 2 2 2 2 2 2 1 2 2 2 2
...
Another file is a key file, named key.txt, which is the list of some numbers in the first column of... (5 Replies)