Visit Our UNIX and Linux User Community


Keep the last instance of the record


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Keep the last instance of the record
# 1  
Old 10-27-2009
Keep the last instance of the record

Hi All,

I have a input file like

Code:
1| abc
1| abcd
1| abcde
2| abc
2| abcd
3| abcde

I want the output like

Code:
1| abcde
2| abcde

Any help would be highly appreciated.

Thanks in advance.

Last edited by vgersh99; 10-27-2009 at 03:26 PM.. Reason: code tags, please!
# 2  
Old 10-27-2009
Code:
nawk ' /abcde/{i++;print i"|"$2} ' FS="|" infile

# 3  
Old 10-27-2009
Hi,

It is not always 'abcde' in the last instance of a record.So, I would like to catch the last instance of a record for that key column where 1 and 2 are key's.


Thanks in advance.
# 4  
Old 10-27-2009
Is the input sorted by key? That is, is the following input data valid or not?

1| abc
1| abcd
2| abc
2|abcd
1|abcdef
2|abcdef
# 5  
Old 10-27-2009
Quote:
Originally Posted by lrkp
Hi,

It is not always 'abcde' in the last instance of a record.So, I would like to catch the last instance of a record for that key column where 1 and 2 are key's.


Thanks in advance.
Try this:

Code:
awk -F"|" 'k && $1 != k {print s}{k=$1;s=$1 FS $2}END{print s}' file


Last edited by Franklin52; 10-27-2009 at 06:07 PM.. Reason: Forgot the fieldseparator
# 6  
Old 10-27-2009
Code:
$ awk -F '|' '{A[$1]=$2}END{for (i in A) print i"|"A[i]}' infile
1| abcde
2| abcd
3| abcde

This is using your example infile. If the last record would be 2 |abcde then the output is:
Code:
1| abcde
2| abcde

The input does not need to be sorted.

Last edited by Scrutinizer; 10-27-2009 at 06:08 PM..
# 7  
Old 10-27-2009
Hi Scrutinizer,

Thanks for your reply.

I am getting the following error with your code

awk: 0602-500 Quitting The source line is 1.

Thanks in advance.

---------- Post updated at 05:31 PM ---------- Previous update was at 05:23 PM ----------

Quote:
Originally Posted by Franklin52
Try this:

Code:
awk -F"|" 'k && $1 != k {print s}{k=$1;s=$1 FS $2}END{print s}' file

Hi Franklin,

This code is working but has an issue.

One of my record is like below.

Code:
1|andndnnd
1| ahhhhhhhh MN
1| bbbbbbbbbb mmmmmmm MN101
1| bbbbbbbbbb mmmmmmm MN101  and some text here

the output was
Code:
1| bbbbbbbbbb mmmmmmm MN101

instead of
Code:
1| bbbbbbbbbb mmmmmmm MN101  and some text here

Thanks in advance.

Previous Thread | Next Thread
Test Your Knowledge in Computers #361
Difficulty: Medium
The rmdir command remove directories, even if they are not empty.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Need code for updating second record to first record in shell scripting

Hi,, I have requirement that i need to get DISTINCT values from a table and if there are two records i need to update it to one record and then need to submit INSERT statements by using the updated value as a parameter. Here is the example follows.. SELECT DISTINCT ID FROM OFFER_GROUP WHERE... (1 Reply)
Discussion started by: Samah
1 Replies

2. Shell Programming and Scripting

Replace a string for every record after the 1st record

I have data coming in the below format for each record <?xml version="1.0" encoding="UTF-8" standalone="no"?><test_sox xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><testdetials>....</test_sox> <?xml version="1.0" encoding="UTF-8" standalone="no"?><test_sox... (8 Replies)
Discussion started by: dsravanam
8 Replies

3. Shell Programming and Scripting

Extract timestamp from first record in xml file and it checks if not it will replace first record

I have test.xml <emp><id>101</id><name>AAA</name><date>06/06/14 1811</date></emp> <Join><id>101</id><city>london</city><date>06/06/14 2011</date></join> <Join><id>101</id><city>new york</city><date>06/06/14 1811</date></join> <Join><id>101</id><city>sydney</city><date>06/06/14... (2 Replies)
Discussion started by: vsraju
2 Replies

4. Shell Programming and Scripting

How to compare current record,with next and previous record in awk without using array?

Hi! all can any one tell me how to compare current record of column with next and previous record in awk without using array my case is like this input.txt 0 32 1 26 2 27 3 34 4 26 5 25 6 24 9 23 0 32 1 28 2 15 3 26 4 24 (7 Replies)
Discussion started by: Dona Clara
7 Replies

5. Shell Programming and Scripting

Reject the record if the record in the next line does not begin with 2.

Hi, I have a input file with the following entries: 1one 2two 3three 1four 2five 3six 1seven 1eight 1nine 2ten 2eleven 2twelve 1thirteen 2fourteen The output should be: (5 Replies)
Discussion started by: supchand
5 Replies

6. Shell Programming and Scripting

Reject the record if the record in the next line does not satisfy the pattern

Hi, I have a input file with the following entries: 1one 2two 3three 1four 2five 3six 1seven 1eight 1nine 2ten The output should be 1one 2two 3three 1four 2five 3six (2 Replies)
Discussion started by: supchand
2 Replies

7. UNIX for Advanced & Expert Users

Print Full record and substring in that record

I have i got a requirement like below. I have input file which contains following fixed width records. 00000000000088500232007112007111 I need the full record and concatenated with ~ and characters from 1to 5 and concatenated with ~ and charactes from 10 to 15 The out put will be like... (1 Reply)
Discussion started by: ukatru
1 Replies

8. UNIX for Dummies Questions & Answers

how to read record by record from a file in unix

Hi guys, i have a big file with the following format.This includes header(H),detail(D) and trailer(T) information in the file.My problem is i have to search for the character "6h" at 14 th and 15 th position in all the records .if it is there i have to write all those records into a... (1 Reply)
Discussion started by: raoscb
1 Replies

9. Shell Programming and Scripting

replace first instance(not first instance in line)

Alright, I think I know what I am doing with sed(which probably means I don't). But I cant figure out how to replace just the first occurance of a string. I have tried sed, ed, and grep but can't seem to figure it out. If you have any suggestions I am open to anything! (3 Replies)
Discussion started by: IronHorse7
3 Replies

10. Shell Programming and Scripting

splitting a record and adding a record to a file

Hi, I am new to UNIX scripting and woiuld appreicate your help... Input file contains only one (but long) record: aaaaabbbbbcccccddddd..... Desired file: NEW RECORD #new record (hardcoded) added as first record - its length is irrelevant# aaaaa bbbbb ccccc ddddd ... ... ... (1 Reply)
Discussion started by: rsolap
1 Replies

Featured Tech Videos