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


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk Print New Column For Every Two Lines and Match On Multiple Column Values to print another column
# 1  
Old 11-14-2013
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

Code:
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 fourth column for every two rows and if

a. Both values are positive, print another column saying z=0,color=pink for both rows.
b. Both values are negative, print another column saying z=0,color=violet for both rows.
c. If first is positive and second is negative, print another column saying z=0,color=yellow for both rows.
d. If first is negative and second is positive, print another column saying z=0,color=brown for both rows.

So, My final output will be

Code:
link1 axis1 0 1 10 z=0,color=pink
link1 axis2 0 1 5 z=0,color=pink
link2 axis1 1 2 -4 z=0,color=violet
link2 axis2 2 3 -3 z=0,color=violet
link3 axis1 3 4 5 z=0,color=yellow
link3 axis2 3 4 -1 z=0,color=yellow
link4 axis1 4 5 -6 z=0,color=brown
link4 axis2 4 5 1 z=0,color=brown

I was able to print the first column as a series but didn't get to know how to make two values the same and at two row intervals.
# 2  
Old 11-14-2013
What have you tried so far?
# 3  
Old 11-14-2013
Hi Scrutinizer,

So far, I used excel to make the first column.

And I have tried this to match the fourth column

Code:
sort -k2n,2 -k3n,3 input.txt | awk '{print $1"\t"$2"\t"$3"\t"$4}' | awk '{p=$0; v=$4; getline; d=?($4, $4++)} if(d==d++)  {print "z=0,color=pink}'

But, no success. I am still working around it.
# 4  
Old 11-14-2013
I'm not sure what you want to achieve with the sort operation - any link between your lines will be lost.
However, try this (which may still require some polishing):
Code:
awk     'BEGIN          {split ("v y b p", COL)}

         function prt   (arg1)
                        {print "link" cnt, arg1,  "z=0,colour=" COL[p+2*n+1]}

         NR%2           {cnt++
                         p = $NF>0;
                         OLD = $0
                         getline
                         n = $NF>0;
                         prt (OLD)
                         prt ($0)
                        }
        ' file
link1 axis1 0 1 10 z=0,colour=p
link1 axis2 0 1 5 z=0,colour=p
link2 axis1 1 2 -4 z=0,colour=v
link2 axis2 2 3 -3 z=0,colour=v
link3 axis1 3 4 5 z=0,colour=y
link3 axis2 3 4 -1 z=0,colour=y
link4 axis1 4 5 -6 z=0,colour=b
link4 axis2 4 5 1 z=0,colour=b

This User Gave Thanks to RudiC For This Post:
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

Awk: print lines with one of multiple pattern in the same field (column)

Hi all, I am new to using awk and am quickly discovering what a powerful pattern-recognition tool it is. However, I have what seems like a fairly basic task that I just can't figure out how to perform in one line. I want awk to find and print all the lines in which one of multiple patterns (e.g.... (8 Replies)
Discussion started by: elgo4
8 Replies

3. Shell Programming and Scripting

Based on column in file1, find match in file2 and print matching lines

file1: file2: I need to find matches for any lines in file1 that appear in file2. Desired output is '>' plus the file1 term, followed by the line after the match in file2 (so the title is a little misleading): This is honestly beyond what I can do without spending the whole night on it, so I'm... (2 Replies)
Discussion started by: pathunkathunk
2 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. Shell Programming and Scripting

awk command to print only selected rows in a particular column specified by column name

Dear All, I have a data file input.csv like below. (Only five column shown here for example.) Data1,StepNo,Data2,Data3,Data4 2,1,3,4,5 3,1,5,6,7 3,2,4,5,6 5,3,5,5,6 From this I want the below output Data1,StepNo,Data2,Data3,Data4 2,1,3,4,5 3,1,5,6,7 where the second column... (4 Replies)
Discussion started by: ks_reddy
4 Replies

6. Shell Programming and Scripting

awk strings search + print next column after match

Hi, I have a file filled with search strings which have a blank in between and look like this: S. g. Ehr. o. Jg. v. d. Chijs g. Ehr. Now i would like to search for the strings and it also shall return the next column after the match. awk -v FILE="search_strings.txt" 'BEGIN {... (10 Replies)
Discussion started by: sdf
10 Replies

7. Shell Programming and Scripting

find expression with awk in only one column, and if it fits, print whole column

Hi. How do I find an expression with awk in only one column, and if it fits, then print that whole column. 1 apple oranges 2 bannanas pears 3 cats dogs 4 hesaid shesaid echo "which number:" read NUMBER (user inputs number 2 for this example) awk " /$NUMBER/ {field to search is field... (2 Replies)
Discussion started by: glev2005
2 Replies

8. Shell Programming and Scripting

print unique values of a column and sum up the corresponding values in next column

Hi All, I have a file which is having 3 columns as (string string integer) a b 1 x y 2 p k 5 y y 4 ..... ..... Question: I want get the unique value of column 2 in a sorted way(on column 2) and the sum of the 3rd column of the corresponding rows. e.g the above file should return the... (6 Replies)
Discussion started by: amigarus
6 Replies

9. Shell Programming and Scripting

Awk+Grep Input file needs to match a column and print the entire line

I'm having problems since few days ago, and i'm not able to make it works with a simple awk+grep script (or other way to do this). For example, i have a input file1.txt: cat inputfile1.txt 218299910417 1172051195 1172070231 1172073514 1183135117 1183135118 1183135119 1281440202 ... (3 Replies)
Discussion started by: poliver
3 Replies

10. Shell Programming and Scripting

how to read the column and print the values under that column

hi all:b:, how to read the column and print the values under that column ...?? file1 have something like this cat file1 ======= column1, column2,date,column3,column4..... 1, 23 , 12/02/2008,...... 2, 45, 14/05/2008,..... 3, 56, 16/03/2008,..... cat file2 =======... (6 Replies)
Discussion started by: gemini106
6 Replies
Login or Register to Ask a Question

Featured Tech Videos