Help with print out line that have different record in specific column


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help with print out line that have different record in specific column
# 1  
Old 02-23-2014
Help with print out line that have different record in specific column

Input file 1:
Code:
-       7367    8198
-       8225    9383
+       9570    10353

Input file 2:
Code:
-       2917    3667
-       3851    4250
+       4517    6302
+       6302    6740
+       6768    7524
+       7648    8170
+       8272    8896
+       8908    9915
-       10010   10796
-       10788   11514
+       11588   12533
+       12545   13874

Input file 3:
Code:
+       56      1190
+       1199    2606
-       2698    3337

Desired Output file 1:
Code:
-       8225    9383
+       9570    10353

Desired Output file 2:
Code:
-       3851    4250
+       4517    6302
+       8908    9915
-       10010   10796
-       10788   11514
+       11588   12533

Desired Output file 3:
Code:
+       1199    2606
-       2698    3337

I would like only print out the line that start change from "+" to "-" or "-" to "+".
Situation in Input file 2, is a bit more challenge.
I have no much idea about how to solve it out Smilie
Thanks for any advice.
# 2  
Old 02-24-2014
What output would you expect from the input:
Code:
-       1       2
+       3       4
-       5       6
+       7       8

# 3  
Old 02-24-2014
Hi Don Cragun,

Thanks for your reply.
If the input is shown as :
Code:
-       1       2
+       3       4
-       5       6
+       7       8

It should return exactly as :
Code:
-       1       2
+       3       4
-       5       6
+       7       8

I did try the following command :
Code:
awk '_[$1]++==0{print}' input_file

But it don't really return whatever I want Smilie
I a bit confusing regarding write correct code to fix the problem.

Thanks for any advice.
# 4  
Old 02-24-2014
It looks like the script you were trying would just print the 1st line in each file for each different value in the 1st field. The following awk program seems to do what you want:
Code:
awk '
$1 == f1 || NR == 1 {
        f0 = $0 "\n"
        f1 = $1
        next
}
{       print f0 $0
        f0 = ""
        f1 = $1
}' input_file

If you want to try this on a Solaris/SunOS system, use /usr/xpg4/bin/awk, /usr/xpg6/bin/awk, or nawk instead of the default /usr/bin/awk.
This User Gave Thanks to Don Cragun For This Post:
# 5  
Old 02-24-2014
Try this

Code:
 awk 'p && $1 != p{print v; print}{p=$1;v=$0}' infile

--ahamed
This User Gave Thanks to ahamed101 For This Post:
# 6  
Old 02-24-2014
Quote:
Originally Posted by ahamed101
Try this

Code:
 awk 'p && $1 != p{print v; print}{p=$1;v=$0}' infile

--ahamed
When given the input shown in message #3 in this thread, the above script produces:
Code:
-       1       2
+       3       4
+       3       4
-       5       6
-       5       6
+       7       8

instead of:
Code:
-       1       2
+       3       4
-       5       6
+       7       8

This User Gave Thanks to Don Cragun For This Post:
# 7  
Old 02-24-2014
Thanks Don. I tested only with the OP data.

Updated

Code:
awk 'p && $1 != p{print v; print;p=v="";next}{p=$1;v=$0}'  infile



On a second thought, technically speaking the OP wanted the output whenever the sign changed.
In a parallel universe, that output would be still valid Smilie

--ahamed
This User Gave Thanks to ahamed101 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

Overwrite specific column in xml file with the specific column from adjacent line

I have an xml file dumped from rrd file, that I want to "patch" so the xml file doesn't contain any blank hole in the resulting graph of the rrd file. Here is the file. <!-- 2015-10-12 14:00:00 WIB / 1444633200 --> <row><v> 4.0419731265e+07 </v><v> 4.5045912770e+06... (2 Replies)
Discussion started by: rk4k
2 Replies

2. Shell Programming and Scripting

Help with print out record if first and next line follow specific pattern

Input file: pattern1 100 250 US pattern2 50 3050 UK pattern3 100 250 US pattern1 70 1050 UK pattern1 170 450 Mal pattern2 40 750 UK . . Desired Output file: pattern1 100 250 US pattern2 50 3050 UK pattern1 170 450 Mal pattern2... (3 Replies)
Discussion started by: cpp_beginner
3 Replies

3. Shell Programming and Scripting

How to print multiple specific column after a specific word?

Hello.... Pls help me (and sorry my english) :) So I have a file (test.txt) with 1 long line.... for example: isgc jsfh udgf osff 8462 error iwzr 653 idchisfb isfbisfb sihfjfeb isfhsi gcz eifh How to print after the "error" word the 2nd 4th 5th and 7th word?? output well be: 653 isfbisfb... (2 Replies)
Discussion started by: marvinandco
2 Replies

4. Shell Programming and Scripting

Problem facing to compare different column and print out record with smallest number

Hi, Input file 1 : 37170 37196 77 51 37174 37195 73 52 37174 37194 73 53 Desired Output file 1 : 37170 37196 77 51 Input file 2 : 37174 37195 73 0 37170 37196 77 0 Desired Output file 2 : 37174 37195 73 0 (1 Reply)
Discussion started by: cpp_beginner
1 Replies

5. Shell Programming and Scripting

Problem to print out record got smallest number in specific column

Hi, Anybody know how to print out the record that shown smallest number among column 3 and column 4 Case 1 Input : 37170 37196 77 51 37174 37195 73 52 37174 37194 73 53 Case 1 Output : 37170 37196 77 51 Case 2 Input : 469613 469660 73 ... (4 Replies)
Discussion started by: cpp_beginner
4 Replies

6. Shell Programming and Scripting

Execution problem with print out record that follow specific pattern

Hi, Do anybody know how to print out only those record that column 1 is "a" , then followed by "b"? Input file : a comp92 2404242 2405172 b comp92 2405303 2406323 b comp92 2408786 2410278 a comp92 2410271 2410337 a comp87 1239833 1240418 b comp87... (3 Replies)
Discussion started by: patrick87
3 Replies

7. Shell Programming and Scripting

awk to print record not equal specific pattern

how to use "awk" to print any record has pattern not equal ? for example my file has 5 records & I need to get all lines which $1=10 or 20 , $2=10 or 20 and $3 greater than "130302" as it shown : 10 20 1303252348212B030 20 10 1303242348212B030 40 34 1303252348212B030 10 20 ... (14 Replies)
Discussion started by: arm
14 Replies

8. Shell Programming and Scripting

Print first and last line from multiline record

Hi - I'm new to working with multiline records and I'm going nuts trying to do something that seems simple. Input: Tue May 1 14:00 Header Record 1 is valid. Tue May 1 14:00 processing data to 25-Mar-2012 09:00:23.15 Tue May 1 14:03 Header Record 1 is valid. Tue May 1 14:03 processing data... (4 Replies)
Discussion started by: Catullus
4 Replies

9. Shell Programming and Scripting

print first few lines, then apply regex on a specific column to print results.

abc.dat tty cpu tin tout us sy wt id 0 0 7 3 19 71 extended device statistics r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device 0.0 133.2 0.0 682.9 0.0 1.0 0.0 7.2 0 79 c1t0d0 0.2 180.4 0.1 5471.2 3.0 2.8 16.4 15.6 15 52 aaaaaa1-xx I want to skip first 5 line... (4 Replies)
Discussion started by: kchinnam
4 Replies

10. Shell Programming and Scripting

Question about sort specific column and print other column at the same time !

Hi, This is my input file: ali 5 usa abc abu 4 uk bca alan 6 brazil bac pinky 10 utah sdc My desired output: pinky 10 utah sdc alan 6 brazil bac ali 5 usa abc abu 4 uk bca Based on the column two, I want to do the descending order and print out other related column at the... (3 Replies)
Discussion started by: patrick87
3 Replies
Login or Register to Ask a Question