If pattern in column 3 matches pattern in column 2 (any row), print value in column 1


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers If pattern in column 3 matches pattern in column 2 (any row), print value in column 1
# 1  
Old 06-04-2019
If pattern in column 3 matches pattern in column 2 (any row), print value in column 1

Hi all,

I have searched and searched, but I have not found a solution that quite fits what I am trying to do.

I have a long list of data in three columns. Below is a sample:

Code:
1,10,8
2,12,10
3,13,12
4,14,14
5,15,16
6,16,18

Moderator's Comments:
Mod Comment Please use code tags

What I need to do is as follows: If a number in column three matches a number in column two, print "," and the number in the corresponding row in column one. If there is no match, just print ",". So an expected result for the sample would be as follows:

Code:
1,10,8,
2,12,10,1
3,13,12,2
4,14,14,4
5,15,16,6
6,16,18,

I've assumed that AWK would be the best tool for this task, but I am open to using any tool. The solutions I have found and tried only match corresponding rows. They don't match a pattern in one column to any pattern in another column. I'm guessing a loop may be required, but I am a novice to looping.

The values in column one are just the ordinal numbers for the rows, if that is relevant to a solution.

I am very grateful for any help. Thank you.

Last edited by jim mcnamara; 06-04-2019 at 10:30 AM..
# 2  
Old 06-04-2019
Suppose that column 3 matches both a previous row and another row further down. What happens?
# 3  
Old 06-04-2019
a bit of a "shot in the dark - different results as I believe the description doesn't jive with the sample data.
awk -f bleed.awk myFile where bleed.awk is:
Code:
BEGIN {
  FS=OFS=","
}
{
   t2[$2]=$1
   t3[$3]=$1
   t3t[$1]=$3
}
END {
  for (i in t2)
    print t2[i], i, t3t[t2[i]], (i in t3)?t3[i]:""
}

results in:
Code:
1,10,8,2
2,12,10,3
3,13,12,
4,14,14,4
5,15,16,
6,16,18,5

This User Gave Thanks to vgersh99 For This Post:
# 4  
Old 06-04-2019
Thank you so much, vgersh99! I believe that solution will work!
# 5  
Old 06-04-2019
actually (I think) it should be - depending on how "strict" your definition/goal is - pick your poison :
Code:
BEGIN {
  FS=OFS=","
}
{
   t2[$2]=$1
   t3[$3]=$1
   t3t[$1]=$3
}
END {
  for (i in t2)
    print t2[i], i, t3t[t2[i]], (i in t3)?t3[i]:( t3t[t2[i]] in t2)?t2[t3t[t2[i]]]:""
}

resulting in:
Code:
1,10,8,2
2,12,10,3
3,13,12,2
4,14,14,4
5,15,16,6
6,16,18,5

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Remove entire line from a file if 1st column matches a pattern

I have one requirement to delete all lines from a file if it matches below scenario. File contains three column. Employee Number, Employee Name and Employee ID Scenario is: delete all line if Employee Number (1st column) contains below 1. Non-numeric Employee Number 2. Employee Number that... (3 Replies)
Discussion started by: anshu ranjan
3 Replies

2. Shell Programming and Scripting

awk Print New Column For Every Two Lines and Match On Multiple Column Values to print another column

Hi, My input files is like this axis1 0 1 10 axis2 0 1 5 axis1 1 2 -4 axis2 2 3 -3 axis1 3 4 5 axis2 3 4 -1 axis1 4 5 -6 axis2 4 5 1 Now, these are my following tasks 1. Print a first column for every two rows that has the same value followed by a string. 2. Match on the... (3 Replies)
Discussion started by: jacobs.smith
3 Replies

3. Shell Programming and Scripting

Difference of the same column when two other column matches and one column differs less than 1 hour

This is my input file : # cat list 20130430121600, cucm, location,76,2 20130430121600,cucm1,location1,76,4 20130430122000,cucm,location,80,8 20130430122000,cucm1,location1,90,8 20130430140000,cucm1,location1,87,11 20130430140000, cucm,location,67,9 This is the required output ... (1 Reply)
Discussion started by: Lakshmikumari
1 Replies

4. Shell Programming and Scripting

Print every 5 4th column values as separate row with different first column

Hi, I have the following file, chr1 100 200 20 chr1 201 300 22 chr1 220 345 23 chr1 230 456 33.5 chr1 243 567 90 chr1 345 600 20 chr1 430 619 21.78 chr1 870 910 112.3 chr1 914 920 12 chr1 930 999 13 My output would be peak1 20 22 23 33.5 90 peak2 20 21.78 112.3 12 13 Here the... (3 Replies)
Discussion started by: jacobs.smith
3 Replies

5. UNIX for Dummies Questions & Answers

awk to print first row with forth column and last row with fifth column in each file

file with this content awk 'NR==1 {print $4} && NR==2 {print $5}' file The error is shown with syntax error; what can be done (4 Replies)
Discussion started by: cdfd123
4 Replies

6. Shell Programming and Scripting

Row to column transpose between same pattern.

Hi All, I have been trying to transpose rows to column in an large file (about 15000 lines) between matching pattern. Searched all posts in this forum, but not able find the solution to my problem. Any help appreciated.!! Input /*------XXXXXX-------*/ owner: XXXX location: XXXX... (3 Replies)
Discussion started by: RobP
3 Replies

7. Shell Programming and Scripting

Replace column that matches specific pattern, with column data from another file

Can anyone please help with this? I have 2 files as given below. If 2nd column of file1 has pattern foo1@a, find the matching 1st column in file2 & replace 2nd column of file1 with file2's value. file1 abc_1 foo1@a .... abc_1 soo2@a ... def_2 soo2@a .... def_2 foo1@a ........ (7 Replies)
Discussion started by: prashali
7 Replies

8. Shell Programming and Scripting

need to remove duplicates based on key in first column and pattern in last column

Given a file such as this I need to remove the duplicates. 00060011 PAUL BOWSTEIN ad_waq3_921_20100826_010517.txt 00060011 PAUL BOWSTEIN ad_waq3_921_20100827_010528.txt 0624-01 RUT CORPORATION ad_sade3_10_20100827_010528.txt 0624-01 RUT CORPORATION ... (13 Replies)
Discussion started by: script_op2a
13 Replies

9. Shell Programming and Scripting

column to row conversion with additional pattern

Hi there, I've an input file1 as follows: 1001 1002 1003 1004 1005 I would like to have an output file2 as follows: Numbers are 1001/ 1002/ 1003/ 1004/ 1005/ Any help is appreciated. (2 Replies)
Discussion started by: kbirde
2 Replies

10. Shell Programming and Scripting

replace a column in a file if it matches certain pattern

Hi, I want to replace a column in a file if it matches certain pattern. Can you help me on this. Here is the file content. 000000 1111111 2222222 011111 0123445 1234556 023445 1111111 2343455 if second column contains 1111111 i need to replace it with 0000000 Can you... (6 Replies)
Discussion started by: Krrishv
6 Replies
Login or Register to Ask a Question