Sponsored Content
Top Forums Shell Programming and Scripting Taking largest (negative) number from column of coordinates and adding positive form to every other Post 302561892 by Corona688 on Wednesday 5th of October 2011 01:11:43 PM
Old 10-05-2011
Do you care about the output spacing? It reduces it to single spaces here, but you could make it tabs with awk -v OFS="\t" ...

---------- Post updated at 11:02 AM ---------- Previous update was at 11:01 AM ----------

Quote:
Originally Posted by crunchgargoyle
Of course, and thank you.

Original (example):

Code:
HETATM    1  C   UNK     0     -25.639   7.865   8.470  0.00  0.00           C+0
HETATM    2  C   UNK     0     -24.868   8.448   7.265  0.00  0.00           C+0
HETATM    3  C   UNK     0     -23.332   8.257   7.385  0.00  0.00           C+0
HETATM    4  C   UNK     0     -22.562   8.844   6.174  0.00  0.00           C+0

Desired (example):

Code:
HETATM    1  C   UNK     0     0   7.865   8.470  0.00  0.00           C+0
 HETATM    2  C   UNK     0     0.771   8.448   7.265  0.00  0.00           C+0
 HETATM    3  C   UNK     0     2.307   8.257   7.385  0.00  0.00           C+0
 HETATM    4  C   UNK     0     3.077  8.844   6.174  0.00  0.00           C+0

I don't understand this output at all. What formula do you get 0.771 from? How does the smallest negative number manage to not become zero when you subtract it from itself? Why don't the other two change when you're adding to every single column?

---------- Post updated at 11:05 AM ---------- Previous update was at 11:02 AM ----------

I think I get it. You're wanting the largest negative number in the entire file.

---------- Post updated at 11:11 AM ---------- Previous update was at 11:05 AM ----------

It has to process the data twice, since it won't know the least value until the data's finished.

Code:
$ cat least.awk
BEGIN {
        # Print output tab-separated
        OFS="\t"
        # Read lines, finding the minimum from columns 6 through 8
        while(getline < FILE)
        for(N=6; N<=8; N++) if($N < MIN) MIN=$N
        # Close FILE so we can process it again from the start
        close(FILE);

        # Read and print each line, subtracting the min value from
        # columns 6-8
        while(getline < FILE)
        {
                for(N=6; N<=8; N++) $N -= MIN
                print
        }
        # Quit right here, don't go into the main awk processing loop
        exit
}
$ gawk -f least.awk -v FILE="data" # Give it filename as FILE
HETATM  1       C       UNK     0       1.073   34.577  35.182  0.00    0.00   C+0
HETATM  2       C       UNK     0       1.844   35.16   33.977  0.00    0.00   C+0
HETATM  3       C       UNK     0       3.38    34.969  34.097  0.00    0.00   C+0
HETATM  4       C       UNK     0       4.15    35.556  32.886  0.00    0.00   C+0
HETATM  5       C       UNK     0       5.684   35.36   33.013  0.00    0.00   C+0
HETATM  6       C       UNK     0       6.466   35.944  31.806  0.00    0.00   C+0
HETATM  7       C       UNK     0       7.998   35.743  31.943  0.00    0.00   C+0
HETATM  8       C       UNK     0       8.781   36.326  30.738  0.00    0.00   C+0
HETATM  9       C       UNK     0       10.312  36.126  30.875  0.00    0.00   C+0
HETATM  10      C       UNK     0       11.103  36.705  29.675  0.00    0.00   C+0
HETATM  11      C       UNK     0       12.634  36.495  29.83   0.00    0.00   C+0
HETATM  12      C       UNK     0       13.436  37.07   28.636  0.00    0.00   C+0
HETATM  13      C       UNK     0       14.971  36.877  28.76   0.00    0.00   C+0
HETATM  14      C       UNK     0       15.715  37.473  27.535  0.00    0.00   C+0
HETATM  15      C       UNK     0       17.259  37.31   27.599  0.00    0.00   C+0
HETATM  16      C       UNK     0       17.968  37.916  26.363  0.00    0.00   C+0
HETATM  17      O       UNK     0       19.292  37.74   26.486  0.00    0.00   O+0
HETATM  18      P       UNK     0       20.358  38.163  25.535  0.00    0.00   P+0
HETATM  19      O       UNK     0       21.678  37.76   26.083  0.00    0.00   O+0
HETATM  20      O       UNK     0       20.332  39.635  25.364  0.00    0.00   O+0
HETATM  21      O       UNK     0       20.156  37.507  24.221  0.00    0.00   O+0
HETATM  22      H       UNK     0       17.596  37.416  25.462  0.00    0.00   H+0
HETATM  23      H       UNK     0       17.726  38.983  26.304  0.00    0.00   H+0
HETATM  24      H       UNK     0       17.513  36.248  27.661  0.00    0.00   H+0
HETATM  25      H       UNK     0       17.642  37.805  28.497  0.00    0.00   H+0
HETATM  26      H       UNK     0       15.475  38.539  27.464  0.00    0.00   H+0
HETATM  27      H       UNK     0       15.346  36.982  26.628  0.00    0.00   H+0
HETATM  28      H       UNK     0       15.331  37.368  29.668  0.00    0.00   H+0
HETATM  29      H       UNK     0       15.202  35.81   28.831  0.00    0.00   H+0
HETATM  30      H       UNK     0       13.224  38.139  28.555  0.00    0.00   H+0
HETATM  31      H       UNK     0       13.096  36.583  27.719  0.00    0.00   H+0
HETATM  32      H       UNK     0       12.967  36.982  30.75   0.00    0.00   H+0
HETATM  33      H       UNK     0       12.838  35.425  29.914  0.00    0.00   H+0
HETATM  34      H       UNK     0       10.892  37.775  29.592  0.00    0.00   H+0
HETATM  35      H       UNK     0       10.763  36.219  28.756  0.00    0.00   H+0
HETATM  36      H       UNK     0       10.522  35.056  30.957  0.00    0.00   H+0
HETATM  37      H       UNK     0       10.651  36.613  31.794  0.00    0.00   H+0
HETATM  38      H       UNK     0       8.566   37.396  30.659  0.00    0.00   H+0
HETATM  39      H       UNK     0       8.437   35.837  29.822  0.00    0.00   H+0
HETATM  40      H       UNK     0       8.34    36.231  32.862  0.00    0.00   H+0
HETATM  41      H       UNK     0       8.211   34.673  32.025  0.00    0.00   H+0
HETATM  42      H       UNK     0       6.252   37.014  31.726  0.00    0.00   H+0
HETATM  43      H       UNK     0       6.123   35.455  30.889  0.00    0.00   H+0
HETATM  44      H       UNK     0       6.031   35.849  33.928  0.00    0.00   H+0
HETATM  45      H       UNK     0       5.902   34.291  33.091  0.00    0.00   H+0
HETATM  46      H       UNK     0       3.803   35.067  31.971  0.00    0.00   H+0
HETATM  47      H       UNK     0       3.932   36.624  32.808  0.00    0.00   H+0
HETATM  48      H       UNK     0       3.602   33.9    34.174  0.00    0.00   H+0
HETATM  49      H       UNK     0       3.73    35.458  35.011  0.00    0.00   H+0
HETATM  50      H       UNK     0       1.617   36.228  33.902  0.00    0.00   H+0
HETATM  51      H       UNK     0       1.488   34.671  33.066  0.00    0.00   H+0
HETATM  52      H       UNK     0       0       34.736  35.051  0.00    0.00   H+0
HETATM  53      H       UNK     0       1.256   33.503  35.267  0.00    0.00   H+0
HETATM  54      H       UNK     0       1.386   35.067  36.107  0.00    0.00   H+0
$

 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help in adding positive & negative values in a column

Hi Gurus, In my file I have an amount field from position 74 to 87, which contains values starting with '+' as well as '-'. I want to add all positive values in a varible called "CREDIT" and all negative values in a variable "DEBIT". I know, we can use grep to identify values with positive and... (4 Replies)
Discussion started by: berlin_germany
4 Replies

2. Programming

Adding 2 difft int to form a number

got 1 problem.. can someone help me wit the logic? Money Money ::operator+(const Money &rhs)const { Money temp; temp.a = a+rhs.a; temp.b = b+rhs.b; return temp; }//end i got 2 number e.g 6.2 and 3.8 (1 Reply)
Discussion started by: xiaojesus
1 Replies

3. Shell Programming and Scripting

Perl output with negative and positive numbers

Hello, For my weather station I have made a little perl script to put the data into cacti. The next problem I have. I can only get positive numbers or negative numbers. What do I do: Though a shell scrip I call the perl script. Shell script: #!/bin/sh cat data.txt | stats.pl Perl... (4 Replies)
Discussion started by: rbl-blacklight
4 Replies

4. Shell Programming and Scripting

Finding the most positive and negative value and defining its position

Hi, I have a file that looks like this: Jake 2 3 4 6 4 3 -2 -1 Jerry 1 2 3 2 1 7 -6 -1 Timmy -1 -4 -5 -8 9 3 1 I want to find the most positive and negative value for each row and also define its position (based on column #) So the output would look... (7 Replies)
Discussion started by: gisele_l
7 Replies

5. Shell Programming and Scripting

Sorting positive and negative values

Hello, I have a list like this : 1 2 -4 0 -3 -7 5 6 etc. Is there a way to remove all the positive values and print only the negative values, without using grep, sed or awk? Thanks, Prasanna (4 Replies)
Discussion started by: prasanna1157
4 Replies

6. Shell Programming and Scripting

addition of both positive and negative numbers

Let, I have three numbers +00123.25 -00256.54 +00489.23 I need to sum up all those three numbers, after storing them in three variables (say var1, var2, var3). I used both expr and BC, but they didn't work for me. But, I am not able to sum up them, as I don't have any idea how to... (13 Replies)
Discussion started by: mady135
13 Replies

7. Shell Programming and Scripting

Splitting a file based on positive and negative numbers

Dear All, I have to split a tab delimited file in two files based on the presence of a positive or negative in column number 9 , for example file: A 1 5 erg + 6766 0.9889 0.9817 9.01882 erg inside upstream B 1 8 erg2 + 6766 0.9889 0.9817 -9.22 erg2 inside... (3 Replies)
Discussion started by: paolo.kunder
3 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. UNIX for Beginners Questions & Answers

Converting negative number to positive in a file

Hi ALL, I am having semi column separated file as below. I am having negative values for the records starting with 11095. How can I convert that positive number I tried this below seems not working sed 's/ \(*\)$/ -\1/;t;s/\(.*\)-/\1/ myfile myfile... (6 Replies)
Discussion started by: arunkumar_mca
6 Replies

10. UNIX for Beginners Questions & Answers

Splitting a file based on negative and positive numbers

I have a file that is pipe delimited and in Column F they have number values, both positive and negative. I need to take the one file I am starting with and split it into two separate files based on negative and positive numbers. What is the command to do so? And then I need to also transfer... (4 Replies)
Discussion started by: cckaiser15
4 Replies
All times are GMT -4. The time now is 01:22 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy