Home > other >  How to make "sort" execute and print earlier before the "awk script" completely
How to make "sort" execute and print earlier before the "awk script" completely

Time:11-07

So, I basically want to store sorted array/data into another array and use that data to print something else?

Even when I want to have the footer, sorted data is printed after the footer.

printf ("    %-25s %-20s %d\n", employee_name[working_employee_id[y]], title[employee_name[working_employee_id[y]]], salary[employee_name[working_employee_id[y]]]) | "sort -nr -k2"

I want to print other things after the execution of this line instead of letting sort to print at the end

CodePudding user response:

You need to close() the pipe at the end of your input before printing anything else if you want to make sure the command you're piping to finishes displaying all its output before your footer text.

Example:

$ paste <(seq 10 | shuf) <(seq 10 | shuf) |
  awk '{ printf "%d\t%d\t%d\n", $1, $2, $1   $2 | "sort -k1,1n" }
       END { close("sort -k1,1n"); print "a\tb\tc" }'
1   8   9
2   3   5
3   6   9
4   4   8
5   2   7
6   10  16
7   9   16
8   1   9
9   7   16
10  5   15
a   b   c

  • Related