Problem to print out record got smallest number in specific column


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Problem to print out record got smallest number in specific column
# 1  
Old 02-26-2014
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 :
Code:
37170   37196   77      51
37174   37195   73      52
37174   37194   73      53

Case 1 Output :
Code:
37170   37196   77      51

Case 2 Input :
Code:
469613  469660  73      120
469614  469659  74      119
469616  469657  76      117
469618  469655  78      115

Case 2 Output :
Code:
469613  469660  73      120

Case 3 Input :
Code:
648274  648296  239     261

Case 3 Output :
Code:
648274  648296  239     261

By comparing only column 3 and 4 in each case. I would like to print out only the line that got smallest number (eg. 51 in column 4, Case 1 is smallest; 73 in column 3, Case 2 is smallest).

If just only one record in the file, then just straight print it out. Since nothing to compare in column 3 or 4.

Thanks for any advice.
It seems like a bit complicated comparison Smilie
# 2  
Old 02-26-2014
Quick dirty awk:
Code:
awk 'NR==1{L=$NF<$(NF-1)?$NF:$(NF-1)}$(NF-1)<= L{L=$(NF-1);t=$0};$NF<=L{L=$NF;t=$0}END{print t}' infile

This User Gave Thanks to Klashxx For This Post:
# 3  
Old 02-26-2014
Here is another approach:
Code:
awk '{x=$3<$4?$3:$4; i=i?i:x ;if(x<=i){i=x; s=$0}} END{print s}' file

This User Gave Thanks to Subbeh For This Post:
# 4  
Old 02-26-2014
Thanks, it worked fine and perfect Smilie

---------- Post updated at 09:59 PM ---------- Previous update was at 09:39 AM ----------

Hi Subbeh,

I have one more question need your advice :
Code:
48524   48543   21      2
48520   48547   25      2

From the above situation, column 4 between both line are smallest.
But column 3 in line 1 smaller than column 3 in line 2.
Do you know how to change your awk code to allow it print out the line that has smallest number in column 3 and column 4?

Thanks for advice.

---------- Post updated at 10:06 PM ---------- Previous update was at 09:59 PM ----------

Hi Subbeh,

I just find a "bug" when try to run your awk code :
Input file
Code:
48524   48543   21      0
48520   48547   25      2

Output file after run awk program
Code:
awk '{x=$3<$4?$3:$4; i=i?i:x ;if(x<=i){i=x; s=$0}} END{print s}' file
48520   48547   25      2

Desired Output :
Code:
48524   48543   21      0

Thanks ya.

---------- Post updated at 10:10 PM ---------- Previous update was at 10:06 PM ----------

Hi Klashxx,

Do you have any idea how to do the second comparison and print out the line that has smallest number in column 3 and 4?
I notice in some case, the smallest number are in same column (either column 3 or 4). In that case, I would like to compare the other column and print out the line that record smallest number in both column 3 and 4.

Thanks a lot.
It a bit complicated case Smilie
# 5  
Old 02-27-2014
You could try something like:
Code:
awk '
function chk() {
        l1 = $3 < $4 ? $3 : $4
        l2 = $3 > $4 ? $3 : $4
        return(l1 < low1 || (l1 == low1 && l2 < low2))
}
function sav(sl1, sl2) {
        low1 = sl1
        low2 = sl2
        line = $0
}
NR == 1 {
        sav($3 < $4 ? $3 : $4, $3 > $4 ? $3 : $4)
        next
}
chk() { sav(nl1, nl2)
}
END {   print line
}' file

This User Gave Thanks to Don Cragun 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

Bash script to print the smallest floating point number in a row that is not 0

Hello, I have often found bash to be difficult when it comes to floating point numbers. I have data with rows of tab delimited floating point numbers. I need to find the smallest number in each row that is not 0.0. Numbers can be negative and they do not come in any particular order for a given... (9 Replies)
Discussion started by: LMHmedchem
9 Replies

2. Shell Programming and Scripting

Help with keep the smallest record in file

Input file US Score 10 UK Ball 20 AS Score 50 AK Ball 10 PZ Ballon 50 PA Score 70 WT Data 10 . . Desired output file US Score 10 AK Ball 10 WT Data 10 . . (2 Replies)
Discussion started by: perl_beginner
2 Replies

3. Shell Programming and Scripting

Split column data if the table has n number of column's with some record

Split column data if the table has n number of column's with some record then how to split n number of colmn's line by line with records Table --------- Col1 col2 col3 col4 ....................col20 1 2 3 4 .................... 20 a b c d .................... v ... (11 Replies)
Discussion started by: Priti2277
11 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

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. 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

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

Input file 1: - 7367 8198 - 8225 9383 + 9570 10353 Input file 2: - 2917 3667 - 3851 4250 + 4517 6302 + 6302 6740 + 6768 7524 + 7648 8170 + 8272 8896 + 8908 9915 - 10010 ... (18 Replies)
Discussion started by: perl_beginner
18 Replies

8. Shell Programming and Scripting

Print smallest negative number with corresponding index from a column

considering the following table: ID col1 col2 col3 col4 1 -16.06801249 13.49785832 -56.57087607 -27.00500526 2 -1.53315720 0.71731735 -42.03602078 -39.78554623 3 -1.53315190 0.71731587 -42.03601548 ... (3 Replies)
Discussion started by: Birda
3 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. UNIX for Dummies Questions & Answers

How to print largest and smallest number.

Hey. This is pretty easy stuff but I'm learning the basics of Unix at the moment so keep that in mind. I have to: 1) Write a C-shell script to monitor user activity on the server for 13 minutes. 2) Then print the smallest and largest number of users during these 13 minutes. I have this: 1)... (2 Replies)
Discussion started by: amp10388
2 Replies
Login or Register to Ask a Question