awk script Equivalent .


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers awk script Equivalent .
# 1  
Old 10-29-2019
awk script Equivalent .

Hello. I wrote some code for an awk command but I want to learn to turn it into an awk script but am stuck. I have a file (data.csv) that has the following data:


Code:
ADD,1,3,5,8,10,11,54
SUB,1,2,3,4
ADD,15,18,21,42,37
ADD,1,1,1,0,0,3,16
ADD,4,1,8,0,4,6,13,16,17,20,8,6,4
SUB,13,8

If the line has ADD, I added. Subtract for lines that start with SUB. I am then to return the sum of all the lines. This is the awk code that I have:

Code:
awk -F',' '{if($1 == "ADD") {for(i=2;i<=NF;i++) t+=$i; print t;} else { t=$2;for(i=3;i<=NF;i++) t-=$i;print t; }t=0}' data.csv

The only issue with the output is that it provides a sum for each line but not the total sum. So how would I turn this into a script?
# 2  
Old 10-29-2019
How does a script differ from what you have above?
How does a sum per line differ from a total across all lines?


Print a total in the END section:
Code:
awk -F',' '/^ADD/ {F=1} /^SUB/ {F=-1} {for (i=2; i<=NF; i++) {S+=$i*F; t+=$i*F}; print S; S=0} END {print t}' file
92
-10
133
22
107
-21
323

# 3  
Old 10-29-2019
It doesn't. I just wanted to learn how to put it in a cleaner format (script) like:


Code:
BEGIN {


}


{


}


END {


}

# 4  
Old 10-29-2019
That's a matter of logics, style, and personal taste. Use consistent indentation, keep blocks together, try to find some meaningful nomenclature for variables and functions.

Code:
awk -F',' '
/^ADD/  {F = 1
        }
/^SUB/  {F = -1
        }
        {for (i=2; i<=NF; i++) S += $i*F
         print S
         t += S
         S = 0
        }
END     {print t
        }
' file

This User Gave Thanks to RudiC For This Post:
# 5  
Old 10-29-2019
So if I want to turn that line of code into the format I had mentioned:


Code:
BEGIN {   }   {   }   END {   }

Am I even in the ballpark with the following?
Code:
begin{
IFS=","
}

{
t=0;
if ($1 == "ADD"){
        for (a=2; a <= NF; a++)
                b += $a;
        else {
                b=$2;
                for (a=3; a <= NF; a++)
                        b=$a)
}
}

end {
printf ("The Sum is: ", b)

}

# 6  
Old 10-30-2019
I corrected and formatted your code to give you an idea how it could be formatted:
Code:
BEGIN {
  FS=","
}

{
  if ($1 == "ADD") {
    for (a=2; a <= NF; a++)
      b += $a
  }
  else if ($1 == "SUB") {
    for (a=2; a <= NF; a++)
      b -= $a
  }
}

END {
  printf ("The Sum is: %s\n", b)
}

You would need to call it like this:
Code:
awk -f awkscript infile


Last edited by Scrutinizer; 10-30-2019 at 12:54 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed Equivalent for awk/grep

Any equivalent command using awk or grep? sed -n "/^$(date --date='10 minutes ago' '+%b %_d %H:%M')/,\$p" /abc.log (7 Replies)
Discussion started by: timmywong
7 Replies

2. Shell Programming and Scripting

Java - Arrays.binarySearch function equivalent in awk

Hi all Does anyone know Java-Arrays.binarySearch function equivalent in awk I tried like this but it's not correct one,it just returns array index if and only when searched value available in array, for some reason if searched value not found then I want to return upper nearest neighbour index.... (1 Reply)
Discussion started by: Akshay Hegde
1 Replies

3. Shell Programming and Scripting

awk equivalent code in C for printing NF

Hi all ! whether anyone in forum knows what awk will use while printing number of fields in file(NF) ? for example awk END'{print NF}' file prints number of columns in file if anyone knows equivalent code in C kindly share or explain logic behind it (8 Replies)
Discussion started by: Akshay Hegde
8 Replies

4. Shell Programming and Scripting

What is the equivalent of NR (awk) in perl?

Hello, I searched online; it seems that perl use $NR as NR in awk; however it does not work for me. For example, how to re-write the following awk using perl: awk '{ print NR}' inputfile---------- Post updated at 01:55 PM ---------- Previous update was at 12:49 PM ---------- I found... (2 Replies)
Discussion started by: littlewenwen
2 Replies

5. Shell Programming and Scripting

awk equivalent of regex

Hi all, Can someone tell me what's the (g)awk equal of this simple regex to find ip addresses in urls: egrep "^http://{1,3}\.{1,3}\.{1,3}\.{1,3}(:{1,5})?/"Input: http://10.0.0.1/query.exe http://11y10x09w:80/howaboutme http://192.168.100.190:1234/takeme.gpg Output:... (8 Replies)
Discussion started by: r4v3n
8 Replies

6. Windows & DOS: Issues & Discussions

awk to findstr equivalent

Hi, I 'd like to translate this command from awk to findstr on Windows DOS FILE: str1 server1 a str1 server2 a str2 server1 b str2 server2 b Awk command: awk ' $1 ~/str1/ { print $2, $3 } ' file.txt OUTPUT: server1 a server2 a Thanks, (1 Reply)
Discussion started by: phamp008
1 Replies

7. Shell Programming and Scripting

Bash Script equivalent KSH script?

I always find BASH easier than ksh. At my home, i have written this bash script. I am finding it hard to write its equivalent in ksh, any suggestions? ###################################### #return seconds since `00:00:00 1970-01-01 UTC' (a GNU extension)... (1 Reply)
Discussion started by: boy18nj
1 Replies

8. Linux

Need SCP script equivalent to FTP script .

Hi, Currently i'm using the folllowing FTP acript and its working. echo "open $server" > ftp_file echo "user $user $password" >> ftp_file echo "cd $remote_dir" >> ftp_file echo "lcd $local_dir" >> ftp_file echo "put $file">> ftp_file echo "bye" >> ftp_file ftp -nv < ftp_file I've... (1 Reply)
Discussion started by: vickramshetty
1 Replies

9. Shell Programming and Scripting

shell script equivalent for tcl function

Hello, I need experts help in converting the below tcl function to korn shell function equivalent. proc lsNetMaskToBits {mask} { set dw ; # Top N bits set set dw 0x ; # Make sure it's hexadecimal, else XOR fails. puts "lsNetMaskToBits dw $dw" set dw ; # Complement => low 32-N bits... (1 Reply)
Discussion started by: JackMelson
1 Replies

10. Shell Programming and Scripting

awk equivalent script

Hi All, I need a script that prints a blank line after finding that the next lines first field doesn't match the current lines first field. I really want to do this in awk to improve my own knowledge but the best I can come up with is a bash script. I'd finally like to understand how awk... (10 Replies)
Discussion started by: pondlife
10 Replies
Login or Register to Ask a Question