column operation using awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting column operation using awk
# 1  
Old 09-08-2010
Error column operation using awk

I have atxt file,i want to perform some operation on 3rd coulmn

Code:
 900.00000               1           1           1
   500.00000    
   500.00000    
  100000.000    
      4
      4
  1.45257346E-07   899.10834       67.780083      -3.0000000       6.9356270          0      4
  3.36595804E-07   854.32300       67.787216      -2.0000000      -5.6963296          0      4
  4.59328561E-07   764.32300       67.784538       2.0000000      -3.8667135          0      4
  8.10901852E-08   809.10840       67.784058       3.0000000       5.9845576          0      4

1: I want to find the minimum in the third column and then subtract all the elements of 3rd column with that minimum

i am using the below code to obtain the minimum ( the code is working good )
Code:
awk 'NR==7{min=$3;max=$3}NR>7{if ($3>max){max=$3};if ($3<min){min=$3}}END {delay=max-min; print ""min" "max" "delay}' $inputfile > $outputfile

Code:
desired output file:
1.45257346E-07   899.10834    0
3.36595804E-07   854.32300    0.0071
4.59328561E-07   764.32300    0.0045
8.10901852E-08   809.10840    0.0040

2: is is possible to arrange the rest two columns ($1 and $2 based on the ascending order of the 3rd column
# 2  
Old 09-08-2010
What do you think about the following:
Code:
# testFile=TestFile.txt
# minValue=`awk 'NR==7{min=$3;max=$3}NR>7{if ($3>max){max=$3};if ($3<min){min=$3}}END {print min}' "${testFile}"`
# awk 'NR>6{print $1 " " $2 " " ($3-"'${minValue}'")}' "${testFile}" | sort -k3
1.45257346E-07 899.10834 0
8.10901852E-08 809.10840 0.003975
4.59328561E-07 764.32300 0.004455
3.36595804E-07 854.32300 0.007133

Regards!
# 3  
Old 09-08-2010
Code:
$
$
$ cat f2
 900.00000               1           1           1
   500.00000
   500.00000
  100000.000
      4
      4
  1.45257346E-07   899.10834       67.780083      -3.0000000       6.9356270          0      4
  3.36595804E-07   854.32300       67.787216      -2.0000000      -5.6963296          0      4
  4.59328561E-07   764.32300       67.784538       2.0000000      -3.8667135          0      4
  8.10901852E-08   809.10840       67.784058       3.0000000       5.9845576          0      4
$
$
$ awk 'NR==7 {min=$3; x[1]=$1"~"$2"~"$3; n=1}
     NR>7  {if ($3<min){min=$3}; x[NR-6]=$1"~"$2"~"$3; n=n+1}
     END {for(i=1; i<=n; i++) {split(x[i],y,"~"); print y[1],y[2],y[3]-min}
         }' f2 | sort -k3
1.45257346E-07 899.10834 0
8.10901852E-08 809.10840 0.003975
4.59328561E-07 764.32300 0.004455
3.36595804E-07 854.32300 0.007133
$
$
$

tyler_durden
# 4  
Old 09-08-2010
And yet another one Smilie:
Code:
awk 'NR==FNR{if(NR==7){min=$3;next} if($3 < min){min=$3};next}
FNR > 6{print $1, $2, $3-min | "sort -nk3"}' file file

# 5  
Old 09-08-2010
Another one using Perl:

Code:
$ 
$ 
$ cat -n f2
     1	 900.00000               1           1           1
     2	   500.00000
     3	   500.00000
     4	  100000.000
     5	      4
     6	      4
     7	  1.45257346E-07   899.10834       67.780083      -3.0000000       6.9356270          0      4
     8	  3.36595804E-07   854.32300       67.787216      -2.0000000      -5.6963296          0      4
     9	  4.59328561E-07   764.32300       67.784538       2.0000000      -3.8667135          0      4
    10	  8.10901852E-08   809.10840       67.784058       3.0000000       5.9845576          0      4
$ 
$ 
$ 
$ perl -lane '$.>=7 && do {push @x,"$F[0] $F[1] $F[2]"; $m=$F[2] if $.==7 or $F[2]<$m};
              END {for(@x){@y=split; $y[2]-=$m; push @z,"@y"}
                   @m = sort {(split " ",$a)[2] cmp (split " ",$b)[2]} @z; print for(@m)}' f2
1.45257346E-07 899.10834 0
8.10901852E-08 809.10840 0.00397499999999695
4.59328561E-07 764.32300 0.00445499999999299
3.36595804E-07 854.32300 0.00713299999999606
$ 
$ 

tyler_durden
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Do replace operation and awk to sum multiple columns if another column has duplicate values

Hi Experts, Please bear with me, i need help I am learning AWk and stuck up in one issue. First point : I want to sum up column value for column 7, 9, 11,13 and column15 if rows in column 5 are duplicates.No action to be taken for rows where value in column 5 is unique. Second point : For... (12 Replies)
Discussion started by: as7951
12 Replies

2. Shell Programming and Scripting

Using awk to do arithmetic operation

Hi, I've this following text file FileVersion = 1.03 Filetype = meteo_on_curvilinear_grid TIME = 0 hours since 2016-10-03 12:00:00 +00:00 -6.855 -6.828 -6.801 -6.774 -6.747 -6.719 -6.691 -6.663 -6.634 -6.606 -6.577 -6.548 -6.519 -6.489 TIME = 0 hours since... (2 Replies)
Discussion started by: xisan
2 Replies

3. Shell Programming and Scripting

awk --> math-operation in a array

Hi main object is categorize the difference of data-values (TLUFT02B - TLUFT12B). herefor i read out data-files which are named acording to the timeformat yyyymmddhhmm. WR030B 266.48 Grad 0 WR050B 271.46 Grad 0 WR120B 268.11 Grad 0 WV030B 2.51 m/s ... (6 Replies)
Discussion started by: IMPe
6 Replies

4. Shell Programming and Scripting

How To Perform Mathematical Operation Within If in awk?

Hi All, I am using an awk script as below: awk -F'|' 'BEGIN{OFS="|";} { if ($1==$3 && $3==$7 && $7==$13 && $2==$6 && $6==$11 && $15-$14+1==$11) print $0"|""TRUE"; else print $0"|""FALSE"; }' tempfile.txt In above script, all conditions are being checked except the one which is... (4 Replies)
Discussion started by: angshuman
4 Replies

5. UNIX for Dummies Questions & Answers

Column minus column operation?

I have a two files, file A and B, which have 5 columns, and each 5 columns are made up of random numbers, that means, numbers are all different. They have same amount of lines (Both 1000 lines) I hope to do a operation 1) 2nd column of file A - 2nd column of file B 2) 5th column of... (4 Replies)
Discussion started by: exsonic
4 Replies

6. Shell Programming and Scripting

awk math operation on two files

Hi, I need your help. I've got two files and i need to add 2nd line after occurrence of "Group No X" from data2.txt to 3rd line (after occurrence of "Group No X") from data1.txt. There is the same number of "Groups" in both files and the numbers of groups have the same pattern. data1.txt Group... (2 Replies)
Discussion started by: killerbee
2 Replies

7. Shell Programming and Scripting

Enter third column & Perform Operation

I am trying to enter a third column in this file, but the third column should that I call "Math" perform a some math calculations based on the value found in column #2. Here is the input file: Here is the desired output: Output GERk0203078$ Levir Math Cotete_1... (5 Replies)
Discussion started by: Ernst
5 Replies

8. Shell Programming and Scripting

Column operation : cosne and sine operation

I have a txt file with several columns and i want to peform an operation on two columns and output it to a new txt file . file.txt 900.00000 1 1 1 500.00000 500.00000 100000.000 4 4 1.45257346E-07 899.10834 ... (4 Replies)
Discussion started by: shashi792
4 Replies

9. Shell Programming and Scripting

Arithmetic operation with awk

I have output like following in a file usmtnz-dinfsi19 72 71 38 1199 1199 0.8 19:23:58 usmtnz-dinfsi19 72 71 38 1199 1199 0.8 19:24:04 (9 Replies)
Discussion started by: fugitive
9 Replies

10. Shell Programming and Scripting

awk - operation over time staps

Hi @ all, I'm trying to accomplish a simple excel-job with awk, without any result... What i have is a file with a time stamp for each line like : 21:02:07 21:04:11 21:06:28 21:08:44 21:10:45 21:12:48 21:14:52 21:16:53 21:18:55 What i would, is to calculate the time elapsed... (7 Replies)
Discussion started by: m4rco-
7 Replies
Login or Register to Ask a Question