Insert text into specific column

I have the following data:

Dec 24 11:31:10 0000008b 9911662486 Answered Price SGD 0.003 PERIOD: 0 m 6 s
Dec 24 11:21:42 00000086 9911662486 Answered Price SGD 0.001 PERIOD: 0 m 2 s
Dec 20 15:34:28 00000004 9911662486 Answered Price SGD 0.007 PERIOD: 0 m 12 s
Dec 20 18:42:30 0000017b 9911662486 Answered Price SGD 0.005 PERIOD: 0 m 9 s
Dec 20 18:36:04 00000172 9911662486 Answered Price SGD 0.004 PERIOD: 0 m 7 s
Dec 20 18:29:21 0000016d 9911662486 Answered Price SGD 0.007 PERIOD: 0 m 11 s

I would like it to be:

Dec 24 11:31:10 0000008b 9911662486 Answered Price SGD 0.003 PERIOD: 0 m 6 s
Dec 24 11:21:42 00000086 9911662486 Answered Price SGD 0.001 PERIOD: 0 m 2 s
Dec 20 15:34:28 00000004 9911662486 Answered Price SGD 0.007 PERIOD: 0 m 12 s
Dec 20 18:42:30 0000017b 9911662486 Answered Price SGD 0.005 PERIOD: 0 m 9 s
Dec 20 18:36:04 00000172 9911662486 Answered Price SGD 0.004 PERIOD: 0 m 7 s
Dec 20 18:29:21 0000016d 9911662486 Answered Price SGD 0.007 PERIOD: 0 m 11 s
                                                                                   Total SGD 0.027

The "Total SGD 0.027" is insert into column 7,8,9
# cat file ; awk '{ sum+=$9} END {print "Total SGD " sum}' file
Dec 24 11:31:10 0000008b 9911662486 Answered Price SGD 0.003 PERIOD: 0 m 6 s
Dec 24 11:21:42 00000086 9911662486 Answered Price SGD 0.001 PERIOD: 0 m 2 s
Dec 20 15:34:28 00000004 9911662486 Answered Price SGD 0.007 PERIOD: 0 m 12 s
Dec 20 18:42:30 0000017b 9911662486 Answered Price SGD 0.005 PERIOD: 0 m 9 s
Dec 20 18:36:04 00000172 9911662486 Answered Price SGD 0.004 PERIOD: 0 m 7 s
Dec 20 18:29:21 0000016d 9911662486 Answered Price SGD 0.007 PERIOD: 0 m 11 s
Total SGD 0.027

Hi

awk '{x+=$9;}END{print "Total SGD  " x;}1'  file

Guru.

1 Like

i would like to insert into column 7,8,9 at the last line. Is this possible?

Something like this?

awk '{ sum+=$9} {print} END {printf "%60s\n", "Total SGD " sum}' file
Dec 24 11:31:10 0000008b 9911662486 Answered Price SGD 0.003 PERIOD: 0 m 6 s
Dec 24 11:21:42 00000086 9911662486 Answered Price SGD 0.001 PERIOD: 0 m 2 s
Dec 20 15:34:28 00000004 9911662486 Answered Price SGD 0.007 PERIOD: 0 m 12 s
Dec 20 18:42:30 0000017b 9911662486 Answered Price SGD 0.005 PERIOD: 0 m 9 s
Dec 20 18:36:04 00000172 9911662486 Answered Price SGD 0.004 PERIOD: 0 m 7 s
Dec 20 18:29:21 0000016d 9911662486 Answered Price SGD 0.007 PERIOD: 0 m 11 s
                                             Total SGD 0.027
1 Like

Awesome! can explain a bit about the command?

awk '{ sum+=$9} {print} END {printf "%60s\n", "Total SGD " sum}' file
{sum+=$9}

Sums the value in column 9 for each record in file. Since no delimiter is specified, space is the default delimiter.

{print}

Prints each record on file as is, i.e. with no changes (can also be written as {print $0} )

END {printf "%60s\n", "Total SGD " sum}

After all records from file are read (END), print the string "Total SGD " together with total sum of column 9 (sum) right justified with width of 60 spaces (%60s) followed by new line (\n).