How to add subtotal and total according 3rd field mentioned below table?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to add subtotal and total according 3rd field mentioned below table?
# 22  
Old 10-19-2015
Quote:
Originally Posted by RudiC
Remove the commas.
As per my requirement few 4th and fifth field has , separator
like
15,234.00
12,345.00
23,354.00

---------- Post updated at 05:39 AM ---------- Previous update was at 05:37 AM ----------

using tr we can remove the comma?
# 23  
Old 10-19-2015
Add a
Code:
sub (/,/,"",$4)
sub (/,/,"",$5)

after the TMP=$3 line.
# 24  
Old 10-19-2015
Thanks a lot for your quick replay

---------- Post updated at 08:46 AM ---------- Previous update was at 06:59 AM ----------

Hi Rudic,
if the field has 6 digit it removed the decimal when adding subtotal
100000.50
110000.11
output
210000
need the exact value 210000.61
# 25  
Old 10-19-2015
Try adding OFMT="%8.2f" at the very end of the script.
# 26  
Old 10-20-2015
Quote:
Originally Posted by RudiC
Your sort is missing the key to sort by (unless you want to sort from the start of line), and your awk just prints an empty line when field 1 (not if "name", i.e. field 3) changes and doesn't do any totals. BTW, how do we know "ASH" and "SHA" belong together, i.e. are to be grouped, as well as "FL" and "KL"?

As an interim step, try
Code:
sort -t "|" -k3,3 file1 | awk -F\| '
FNR==1  {TMP=$3
        }
TMP!=$3 {print "subtotal", TMP, SUM1, SUM2; SUM1=SUM2=0
        }
        {TMP=$3
         SUM1+=$4
         SUM2+=$5
         TOT1+=$4
         TOT2+=$5
        }
1
END     {print "subtotal", TMP, SUM1, SUM2; SUM1=SUM2=0
         print "   total","   ", TOT1, TOT2
        }
' OFS="|"
115|AKKK|ASH|10|15
115|AKKK|ASH|20|20
115|AKKK|ASH|30|35
115|AKKK|ASH|30|35
subtotal|ASH|90|105
112|ABC|FL|15|15
112|ABC|FL|25|20
112|ABC|FL|25|45
subtotal|FL|65|80
112|ABC|KL|15|15
112|ABC|KL|20|25
subtotal|KL|35|40
111|AKKK|SHA|10|45
111|AKKK|SHA|15|35
111|AKKK|SHA|20|25
subtotal|SHA|45|105
   total|   |235|330

Hi Rudic,
If we have multiple filed (4 to 30)
can we addition all the filed wise and display the total and subtotal
Please let me know if we can use for loop.
Appreciate ur replay

Last edited by udhal; 10-20-2015 at 06:23 AM..
# 27  
Old 10-28-2015
Quote:
Originally Posted by RudiC
Your sort is missing the key to sort by (unless you want to sort from the start of line), and your awk just prints an empty line when field 1 (not if "name", i.e. field 3) changes and doesn't do any totals. BTW, how do we know "ASH" and "SHA" belong together, i.e. are to be grouped, as well as "FL" and "KL"?

As an interim step, try
Code:
sort -t "|" -k3,3 file1 | awk -F\| '
FNR==1  {TMP=$3
        }
TMP!=$3 {print "subtotal", TMP, SUM1, SUM2; SUM1=SUM2=0
        }
        {TMP=$3
         SUM1+=$4
         SUM2+=$5
         TOT1+=$4
         TOT2+=$5
        }
1
END     {print "subtotal", TMP, SUM1, SUM2; SUM1=SUM2=0
         print "   total","   ", TOT1, TOT2
        }
' OFS="|"
115|AKKK|ASH|10|15
115|AKKK|ASH|20|20
115|AKKK|ASH|30|35
115|AKKK|ASH|30|35
subtotal|ASH|90|105
112|ABC|FL|15|15
112|ABC|FL|25|20
112|ABC|FL|25|45
subtotal|FL|65|80
112|ABC|KL|15|15
112|ABC|KL|20|25
subtotal|KL|35|40
111|AKKK|SHA|10|45
111|AKKK|SHA|15|35
111|AKKK|SHA|20|25
subtotal|SHA|45|105
   total|   |235|330

Hi Rudic,
can you please help me how can i assign TMP (TMP=$1|$3 or $1|$2) veriable instead of $3 want to pass two values condition $1 and $2 or $1 and $3 if it is matching then dispaly subtotal and Grand total should be account wise mean $1 wise also diplay the record account order wise like 111to115
Appriciate your replay

Last edited by udhal; 10-28-2015 at 12:26 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk to calculate total and percent off field in file

Trying to use awk to print the lines in file that have either REF or SNV in $3, add a header line, sort by $4 in numerical order. The below code does that already, but where I am stuck is on the last part where the total lines are counted and printed under Total_Targets, under Targets_less_than is... (4 Replies)
Discussion started by: cmccabe
4 Replies

2. Shell Programming and Scripting

Calculate the total 4 field based on the conditions

Please help me to write a script Match with ACNO & NAME if it matched calculate the total val1 val2 val3 and val4 and GT is total of ACNO wise.please check the output Table ----------------- 1005|ANDP|ACN|20|50|10|30 1005|ANDP|ACN|20|10|30|40 1001|AND|NAC|40|50|40|50... (22 Replies)
Discussion started by: kalia4u
22 Replies

3. Shell Programming and Scripting

Need the output in the mentioned Table format

Hi Friends, I have the script output like below: Script Output: ----------------------------------------------------------------------- Details of the Client: ----------------------- name: server1; save set: All; ... (3 Replies)
Discussion started by: akmani
3 Replies

4. Solaris

3rd field in /etc/shadow

Searched and searched, but could not find a official answer. In Solaris, on a new server build, all the system accounts look like this: # cat /etc/shadow root:#########:6445:::::: daemon:NP:6445:::::: bin:NP:6445:::::: sys:NP:6445:::::: adm:NP:6445:::::: lp:NP:6445::::::... (6 Replies)
Discussion started by: flyddw
6 Replies

5. Shell Programming and Scripting

Check a field in a table

I have made a table PRD_WORK_LM.test and it contains one field, ctrl_test. This field contains a 0 or a 1. I want to write a unix script that goes like this: IF ctrl_test = 1 THEN ... ELSE exit FI How can I write this in a script? Do I have to do this within bteq? or outside bteq? can... (5 Replies)
Discussion started by: katled
5 Replies

6. Shell Programming and Scripting

only print line if 3rd field is 01

Similar question... I have a space delimited text file and I want to only print the lines where the 3rd word/field/column is equal to "01" awk '{if $3 = "01" print $0}' something like this. I meant to say: only print line IF 3rd field is 01 (2 Replies)
Discussion started by: ajp7701
2 Replies

7. Shell Programming and Scripting

Adding total of first field for each number in the second field

Dears, I need a script or command which can find the unique number from the second filed and against that number it adds the total of first field . 17215630 , 0 907043 ,1 201050 ,10 394149 ,4 1964 ,9 17215630, 0 907043 ,1 201050, 10 394149 ,4 1964 ,9 1234234, 55 23 ,100 33 ,67 ... (2 Replies)
Discussion started by: shary
2 Replies

8. Shell Programming and Scripting

Total records in table

Hi, I am having two tables. A & B I want to know the total number of records in each table and need to store each value in some variables to process further in the code. How it can be done ? With Regards (2 Replies)
Discussion started by: milink
2 Replies

9. Shell Programming and Scripting

Deleting every 3rd field using awk

I have a file whose format is like the following 350,2,16.2,195,2,8.0 every 3rd column of this file should be deleted. How can i achieve this tried with the following iostat -D -l 2 | /usr/xpg4/bin/awk ' NR>2 { for (i=0;i<=NF;i++)if(i%3==0)$i=""};' but no luck (3 Replies)
Discussion started by: achak01
3 Replies

10. Shell Programming and Scripting

Get the total of a field in all the lines of a group

Hi I have a Fixed format data file where I need to to get the total of the field at certain position in a file for a group of lines. In this data file I need the total of all the field ats position 30:39 for each line starting with 6 and for each group startign with 5. Which means for... (27 Replies)
Discussion started by: appsguy616
27 Replies
Login or Register to Ask a Question