UNIX script to compare 3rd column value with first column and display


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers UNIX script to compare 3rd column value with first column and display
# 1  
Old 04-05-2019
UNIX script to compare 3rd column value with first column and display

Hello Team,

My source data (INput) is like below

Code:
EPIC1	router	EPIC2	Targetdefinition
Exp1	Expres	rtr1	Router
SQL		SrcQual	Exp1	Expres
rtr1	Router	EPIC1	Targetdefinition

My output like
Code:
SQL		SrcQual	Exp1	Expres
Exp1	Expres	rtr1	Router
rtr1	Router	EPIC1	Targetdefinition
EPIC1	router	EPIC2	Targetdefinition

I need a Unix script to search 3rd column value in 1st column and display the records in sorted order like above output.

Can someone help me how to achieve this.
Thanks in advance!!!
Regards,
Sekhar Lekkala.
# 2  
Old 04-05-2019
Hi, try something like:

Code:
awk '
  {
    Rec[$1]=$0
    Col3[$3]
    Next[$1]=$3
  } 

  END {
    for(i in Rec)          # find first record
      if(!(i in Col3))
        break
    while(i in Rec) {      # print until next record does not exist
      print Rec[i]
      i=Next[i] 
    }
}' file

This User Gave Thanks to Scrutinizer For This Post:
# 3  
Old 04-05-2019
Hello sekhar.lsb,

I am confused. If you file is called INput, what is wrong with just sort INput ?

How is EPIC1 router EPIC2 Targetdefinition to match up?


Can you provide more data and show what we need to match and what to avoid please. I'd like to help, but the rules you want to follow are not clear.


Thanks, in advance,
Robin
# 4  
Old 04-05-2019
UNIX script to compare 3rd column value with first column and display

Thank you so much, above code is working fine.
I have question, in first column value is same for two or more columns then in out put is skipping duplicate rows
Now my input is like below:

Code:
rtr1	        Router	EPIC3	Targetdefinition
Exp1	Expres	rtr1	Router
SQL         SrcQual	Exp1	Expres
rtr1	Router	EPIC1	Targetdefinition

Expecting output like
Code:
SQL	SrcQual	Exp1	Expres
Exp1	Expres	rtr1	Router
rtr1	Router	EPIC1	Targetdefinition
rtr1	        Router	EPIC3	Targetdefinition

Moderator's Comments:
Mod Comment please use code tags

Last edited by vgersh99; 04-05-2019 at 04:07 PM.. Reason: Code tags, please!
# 5  
Old 04-05-2019
You are welcome.
You could try:
Code:
awk '
  {
    if($1 in Rec)              # if $1 already present in the records then append 
      Rec[$1]=Rec[$1] RS $0    # a newline character (RS) with the next line
    else
      Rec[$1]=$0
    Col3[$3]                             
    Next[$1]=$3
  } 

  END {
    for(i in Rec)
      if(!(i in Col3))
        break
    while(i in Rec) {
      print Rec[i]
      i=Next[i] 
    }
}' file

Output:
Code:
SQL         SrcQual	Exp1	Expres
Exp1	Expres	rtr1	Router
rtr1	        Router	EPIC3	Targetdefinition
rtr1	Router	EPIC1	Targetdefinition

--
Do multiple records with the same first field only occur for "leaf" (last) values, or can they occur on all levels?
If the latter is the case, could you be more elaborate in what variations can occur and what needs to happen?

Last edited by Scrutinizer; 04-06-2019 at 02:30 AM.. Reason: Replaced ternary if construct by regular if-else statement for clarity reasons
# 6  
Old 04-08-2019
Unix script to compare 3rd column value with first column and display

Thank you so much Scrutinizer!!!!
This is really great forum. This is great help for me. Its working as per my requirement.

Regards,
Sekhar Lekkala.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Need awk or Shell script to compare Column-1 of two different CSV files and print if column-1 matche

Example: I have files in below format file 1: zxc,133,joe@example.com cst,222,xyz@example1.com File 2 Contains: hxd hcd jws zxc cst File 1 has 50000 lines and file 2 has around 30000 lines : Expected Output has to be : hxd hcd jws (5 Replies)
Discussion started by: TestPractice
5 Replies

2. Shell Programming and Scripting

Solution for replacement of 4th column with 3rd column in a file using awk/sed preserving delimters

input "A","B","C,D","E","F" "S","T","U,V","W","X" "AA","BB","CC,DD","EEEE","FFF" required output: "A","B","C,D","C,D","F" "S", T","U,V","U,V","X" "AA","BB","CC,DD","CC,DD","FFF" tried using awk but double quotes not preserving for every field. any help to solve this is much... (5 Replies)
Discussion started by: khblts
5 Replies

3. Shell Programming and Scripting

Changing values only in 3rd column and 4th column

#cat file testing test! nipw asdkjasjdk ok! what !ok host server1 check_ssh_disk!102.56.1.101!30!50!/ other host server 2 des check_ssh_disk!192.6.1.10!40!30!/ #grep check file| awk -F! '{print $3,$4}'|awk '{gsub($1,"",$1)}1' 50 30 # Output: (6 Replies)
Discussion started by: kenshinhimura
6 Replies

4. Shell Programming and Scripting

Compare 3rd column in 2 files

I have the following 2 files. File 1 08FB,000192602673,10000000c9a6b240 0121,000192602673,20000025b550101f 0121,000192602673,20000025b550100f 08FA,000192602673,10000000c9a6b240 File 2 18F2,000195702363,10000000c9a6b240 18F3,000195702363,10000000c9a6b240... (2 Replies)
Discussion started by: kieranfoley
2 Replies

5. Shell Programming and Scripting

Help with compare two column and print out column with smallest number

Input file : 5 20 500 2 20 41 41 0 23 1 Desired output : 5 2 20 0 1 By comparing column 1 and 2 in each line, I hope can print out the column with smallest number. I did try the following code, but it don't look good :( (2 Replies)
Discussion started by: perl_beginner
2 Replies

6. UNIX for Dummies Questions & Answers

Search word in 3rd column and move it to next column (4th)

Hi, I have a file with +/- 13000 lines and 4 column. I need to search the 3rd column for a word that begins with "SAP-" and move/skip it to the next column (4th). Because the 3rd column need to stay empty. Thanks in advance.:) 89653 36891 OTR-60 SAP-2 89653 36892 OTR-10 SAP-2... (2 Replies)
Discussion started by: AK47
2 Replies

7. UNIX for Dummies Questions & Answers

sort a unix file by 3rd column

Hi, Can anybody tell me how to sort a unix file by 3rd column and not by ltr? Please help Thanks in advance (2 Replies)
Discussion started by: vinnyvirk
2 Replies

8. Shell Programming and Scripting

AWK script to create max value of 3rd column, grouping by first column

Hi, I need an awk script (or whatever shell-construct) that would take data like below and get the max value of 3 column, when grouping by the 1st column. clientname,day-of-month,max-users ----------------------------------- client1,20120610,5 client2,20120610,2 client3,20120610,7... (3 Replies)
Discussion started by: ckmehta
3 Replies

9. Shell Programming and Scripting

Compare Two Files(Column By Column) In Perl or shell

Hi, I am writing a comparator script, which comapre two txt files(column by column) below are the precondition of this comparator 1)columns of file are not seperated Ex. file1.txt 8888812341181892 1243548895685687 8945896789897789 1111111111111111 file2.txt 9578956789567897... (2 Replies)
Discussion started by: kumar96877
2 Replies

10. Shell Programming and Scripting

Compare files column to column based on keys

Here is my situation. I need to compare two tab separated files (diff is not useful since there could be known difference between files). I have found similar posts , but not fully matching.I was thinking of writing a shell script using cut and grep and while loop but after going thru posts it... (2 Replies)
Discussion started by: blackjack101
2 Replies
Login or Register to Ask a Question