"Smoothing" the data


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers "Smoothing" the data
# 8  
Old 02-21-2012
I used the code that you suggested:
For the data:

Code:
3002.000
3002.300
3002.600
3002.900
3003.200
3003.500
3003.800
3004.100
3004.400
3004.700
3005.000
3005.300
3005.600
3005.900
3006.200
3006.500
3006.800
3007.100
3007.400
3007.700
3008.000
3008.300

Code:
BEGIN { WIDTH=10 }

{       DATA[(++N)%WIDTH]=$1    }

(N>=WIDTH) {
        V=0
        for(X=(N+1); X<=(N+WIDTH); X++)
                V+=DATA[X%WIDTH];

        print V/WIDTH;
}

I was expecting the output:

3002.000
3005.000
3008.000

But I got:

Code:
3003.35
3003.65
3003.95
3004.25
3004.55
3004.85
3005.15
3005.45
3005.75
3006.05
3006.35
3006.65
3006.95
3007.25
3007.55
3007.85
3008.15
3008.45

Maybe I misunderstood the code?
# 9  
Old 02-21-2012
Hi.
Quote:
Originally Posted by cosmologist
I was expecting the output:
3002.000
3005.000
3008.000
Quote:
The SMOOTH function returns a copy of Array smoothed with a boxcar average of the specified width. The result has the same type and dimensions as Array.

-- excerpt from SMOOTH
Yet you are expecting only 3 values back from an input vector of 22 values. Why is that?

Best wishes ... cheers, drl
# 10  
Old 02-21-2012
Quote:
Originally Posted by cosmologist
Maybe I misunderstood the code?
There were other parts than code, which you didn't read. I detailed clearly what I was trying to do, none of which had anything to do with stripping off decimal points -- you wanted a boxcar average...

Code:
echo "3.14159" | awk '{ printf("%d\n", $1) }'
3
$

That still doesn't clear up what you want to happen to the second column of data. You need to tell us what we're supposed to do to that. It's not going to change itself.
# 11  
Old 02-21-2012
Quote:
Originally Posted by Corona688
There were other parts than code, which you didn't read. I detailed clearly what I was trying to do, none of which had anything to do with stripping off decimal points -- you wanted a boxcar average...
I read that part and it made sense, but when I applied it to my data I didn't get what I was expecting, so now thinking about it I might have a problem with the mathematical concept itself..

I understand that this is a Unix forum not a math forum, so I'll try to figure the math part first.

Thanks
# 12  
Old 02-22-2012
Quote:
Originally Posted by cosmologist
I read that part and it made sense, but when I applied it to my data I didn't get what I was expecting
I added three numbers, and divided by three? Smilie That's liable to add more decimal points...
# 13  
Old 02-22-2012
Ok, I know what it is that confused me now Smilie

So in the example that you mentioned

Quote:
Originally Posted by Corona688
For these points:

Code:
1
5
2
6
3
7
4
8
5
9

for a boxcar average of width 3, would you want:

Code:
(1+5+2)/3, (5+2+6)/3, (2+6+3)/3, (6+3+7)/3, (3+7+4)/3, (7+4+8)/3, (4+5+5)/3, (8+5+9)/3

What I was thinking was:

Code:
(1+5+2)/3, (2+6+3)/3, (3+7+4)/3, (4+5+5)/3

[If I am using the mathematical terms correctly this is convolution with a rectangle function, a special case of the boxcar function]..

Is there a way to modify your code to get that? Smilie

Thanks again for all the help!
# 14  
Old 02-22-2012
If you meant 4+8+5, then sure. I'll let it work on multiple columns, too.

Code:
$ cat data
1       5
5       6
2       7
6       8
3       9
7       10
4       11
8       12
5       13
9       14

$ cat smooth2.awk

BEGIN { WIDTH=3; OFS="\t" }

{
        N++;
        for(M=1; M<=NF; M++)    DATA[M,N%WIDTH]=$M
}

(N>=WIDTH) && !((N-WIDTH)%(WIDTH-1)) {

        for(M=1; M<=NF; M++)
        {
                $M=0

                for(X=(N+1); X<=(N+WIDTH); X++)
                        $M+=DATA[M,X%WIDTH];

                $M /= WIDTH;
        }

        print
}

$ awk -f smooth2.awk data

2.66667 6
3.66667 8
4.66667 10
5.66667 12

$

Note the number of decimal places in the second column is a coincidence, those sums just happened to divide nicely by three.
This User Gave Thanks to Corona688 For This Post:
 
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. AIX

Apache 2.4 directory cannot display "Last modified" "Size" "Description"

Hi 2 all, i have had AIX 7.2 :/# /usr/IBMAHS/bin/apachectl -v Server version: Apache/2.4.12 (Unix) Server built: May 25 2015 04:58:27 :/#:/# /usr/IBMAHS/bin/apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_worker_module (static) ... (3 Replies)
Discussion started by: penchev
3 Replies

2. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

3. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

4. Solaris

The slices "usr", "opt", "tmp" disappeared!!! Help please.

The system don't boot. on the screen appears following: press enter to maintenance (or type CTRL-D to continue)...I checked with format command. ... the slices "0-root","1-swap","2-backup" exist. ...the slises "3-var","6-usr" -unassigned. :( (16 Replies)
Discussion started by: wolfgang
16 Replies

5. Shell Programming and Scripting

how to use "cut" or "awk" or "sed" to remove a string

logs: "/home/abc/public_html/index.php" "/home/abc/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" how to use "cut" or "awk" or "sed" to get the following result: abc abc xyz xyz xyz (8 Replies)
Discussion started by: timmywong
8 Replies

6. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

7. Shell Programming and Scripting

ps -ef | grep "string1" "string2" " "string3"

Hi all, can any one suggest me the script to grep multiple strings from ps -ef pls correct the below script . its not working/ i want to print OK if all the below process are running in my solaris system. else i want to print NOT OK. bash-3.00$ ps -ef | grep blu lscpusr 48 42 ... (11 Replies)
Discussion started by: steve2216
11 Replies

8. Shell Programming and Scripting

cat $como_file | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g'

hi All, cat file_name | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g' Can this be done by using sed or awk alone (4 Replies)
Discussion started by: harshakusam
4 Replies

9. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies
Login or Register to Ask a Question