Find smallest & largest in every column


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Find smallest & largest in every column
# 1  
Old 01-02-2014
Find smallest & largest in every column

Dear All,

I have input like this,

Code:
J_15TEST_ASH05_33A22.13885.txt: $$    1   MAKE   SP1501      1     1   4      6101      7392  2      2442      2685 18      3201      4008 20       120      4158
J_15TEST_ASH05_33A22.13885.txt: $$    1   MAKE   SP1502      1     1   4      5125      6416  2      2198      2442 18      2713      3520 20       120      4158
J_15TEST_ASH05_33A22.13885.txt: $$    1   MAKE   SP1503      1     1   4      4153      5440  2      1955      2198 18      2227      3032 20       120      4158
J_15TEST_ASH05_33A22.13885.txt: $$    1   MAKE   SP1504      1     1   4      3177      4468  2      1711      1955 18      1739      2546 20       120      4158
J_15TEST_ASH05_33A22.13885.txt: $$    1   MAKE   SP1505      1     1   4      2205      3492  2      1468      1711 18      1253      2058 20       120      4158
J_15TEST_ASH05_33A22.13885.txt: $$    1   MAKE   SP1506      1     1   4      1229      2520  2      1224      1468 18       765      1572 20       120      4158
J_15TEST_ASH05_33A22.13885.txt: $$    1   MAKE   SP1507      1     1   4       253      1544  2       980      1224 18       277      1084 20       120      4158
J_15TEST_ASH05_33A22.13885.txt: $$    1   MAKE   SP1508      1     1   4         9       568  2       920       980 18       155       596 20       120      4158

Expected result:


Code:
J_15TEST_ASH05_33A22.13885.txt:   NumFile=4    | D4  min=9 max=7392   | D2 min=920 max=2685   | D18 min=155    max=4008   | D20 min=120    max=4158

Description: need to find smallest & largest in column

My recent code( not working well):

Code:
awk 'BEGIN {maa = 0} {mab=0} {mad=$10} {mae=0} {maf=0} {mag=0} {mah=0} {mai=0} {maj=0} {mak=0} {mal=0} {mam=0} {mac=$9}  {a=$1} {b=$8} {c=$9} {d=$10} {e=$11} {f=$12} {g=$13} {h=$14} {i=$15} {j=$16} {k=$17} {l=$18} {m=$19} {if (a>maa) maa=a} {if (b>mab) mab=b} {if (d>mad) mad=d} {if (e>mae) mae=e} {if (f>maf) maf=f} {if (g>mag) mag=g} {if (h>mah) mah=h} {if (i>mai) mai=i} {if (j>maj) maj=j} {if (k>mak) mak=k} {if (l>mal) mal=l} {if (m>mam) mam=m} {if (c<mac) mac=c}END {print maa,"NumFile="NR, "| D"mab,"min="mac,"max="mad,"| D"mae,"min="maf,"max="mag,"| D"mah,"min="mai,"max="maj,"| D"mak,"min="mal,"max="mam}' input > output

# 2  
Old 01-02-2014
Put this into "script.awk":
Code:
BEGIN {
  a[9]=a[10]=a[12]=a[13]=a[15]=a[16]=a[18]=a[19]=1
}
NR==1 {
  f=$1;n=$8;
  for (i in a) {
    m[i]=$i
    M[i]=$i
  }
}
{
  for (i in a) {
    m[i]=($i<m[i])?$i:m[i]
    M[i]=($i>M[i])?$i:M[i]
  }
}
END {
  printf ("%s   NumFile=%d    | D4  min=%d max=%d   | D2 min=%d max=%d   | D18 min=%d    \
max=%d   | D20 min=%d    max=%d\n", f, n, m[9], M[10], m[12], M[13], m[15], M[16], m[18], M[19])
}

Then run:
Code:
awk -f script.awk input

This User Gave Thanks to bartus11 For This Post:
# 3  
Old 01-02-2014
Try sth along this line (and expand):
Code:
awk     'function min (M, V1, V2) {if ((!M) || V1<M) M=V1; if (V2<M) M=V2; return M}
         function max (M, V1, V2) {if ((!M) || V1>M) M=V1; if (V2>M) M=V2; return M}
                        {NI[$1]++
                         Min[$8]=min (Min[$8], $9, $10)
                         Max[$8]=max (Max[$8], $9, $10)}
         END {print "Numfile: ", NI[$1], "| D"$8"   min=", Min[$8]," max=", Max[$8]}
        ' file
Numfile:  8 | D4   min= 9  max= 7392

This User Gave Thanks to RudiC For This Post:
# 4  
Old 01-02-2014
I suspect this is not always correct.
I would prefer a simple
Code:
function min(a,b) {if (a<b) return a; return b}

and
Code:
Min[$8]=($8 in Min) ? min(Min[$8], min($9, $10)) : min($9, $10)

Dito with max.
This User Gave Thanks to MadeInGermany For This Post:
# 5  
Old 01-02-2014
hi bartus11,

it work..thank you.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Find smallest between replicates ID

Hi All I need to find the smallest values between replicates id (column1) Input file: a name1 1200 a name2 800 b name1 100 b name2 150 b name3 4output: a name2 800 b name3 4 Do you have any suggestion? Thank you! (9 Replies)
Discussion started by: giuliangiuseppe
9 Replies

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

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

4. Shell Programming and Scripting

Find the smallest block

Hi, Here's my data - aa bb cc aa dd ee Now I need to find the smallest block surrounded by aa & dd. Following is not helpful - sed -n '/aa/,/dd/p' file I need only - aa dd (1 Reply)
Discussion started by: nexional
1 Replies

5. Shell Programming and Scripting

Use a string in one column to get the largest or the smallest of another column

I have data that looks like this: chr1 mm9_knownGene exon 155747075 155747189 0.000000 + . gene_id "Glul"; transcript_id "uc007daq.1"; chr1 mm9_knownGene exon 155750064 155750076 0.000000 + . gene_id "Glul";... (3 Replies)
Discussion started by: pbluescript
3 Replies

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

7. UNIX for Dummies Questions & Answers

How to remove duplicated based on longest row & largest value in a column

Hii i have a file with data as shown below. Here i need to remove duplicates of the rows in such a way that it just checks for 2,3,4,5 column for duplicates.When deleting duplicates,retain largest row i.e with many columns with values should be selected.Then it must remove duplicates such that by... (11 Replies)
Discussion started by: reva
11 Replies

8. Shell Programming and Scripting

AWK (how) to get smallest/largest nr of ls -la

Hey, This is a long-shot however, I am stuck with the following problem: I have the output from ls -la, and I want to sort some of that data out by using AWK to filter it. ls -la | awk -f scriptname.awk Input: For example: drwxr-xr-x 3 user users 4096 2010-03-14 20:15 bin/... (5 Replies)
Discussion started by: abciscool
5 Replies

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

10. Shell Programming and Scripting

checking the smallest and largest number

Hi All, My script is reading a log file line by line log file is like ; 19:40:22 :INFO Total time taken to Service External Request---115ms 19:40:25 DEBUG : Batch processed libdaemon.x86_64 0-0.10-5.el5 - u 19:40:22 INFO Total time taken to Service External Request---20ms 19:40:24... (4 Replies)
Discussion started by: subin_bala
4 Replies
Login or Register to Ask a Question