Скрипты AWK, чтобы найти наибольшее число - PullRequest
0 голосов
/ 28 октября 2018
1. \#id;clientid;product name;qty;price
1. 1;fooclient;product A;3;100
2. 2;booclient;product B;4;200
1. 3;xyzzycompany;product C;2;35000
1. 4;testclient;product B;1;190
1. 5;fooclient;product A;10;100
1. 6;testclient;product B;1;25000
1. 7;Mouccccccc;product C;2;300
1. 8;Deeccccccc;product C;2;10
1. 9;ICICT;product Z;12;45000
1. 10;AXISX;product D;14;75000
1. 11;Fcebook;product Z;12;65000

Нужна помощь в поиске максимальной цены с использованием имени клиента с использованием awk.

Пробные параметры: имя файла: invoices_input.txt [со всеми вышеупомянутыми значениями]

awk 'BEGIN { FS = ";" } !/^#/ {print $2 " " $NF}' invoices_input.txt

Результат:

fooclient 100
booclient 200
xyzzycompany 35000
testclient 190
fooclient 100
testclient 25000
Mouccccccc 300
Deeccccccc 10
ICICT 45000
AXISX 75000
Fcebook 65000

Я ожидаю, что AXISX будет напечатан как клиент с наибольшим номером.

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Попробуйте:

awk -F\; 'NR > 1 {
  if ($5 > price) {
    price = $5
    company = $2
  }
  else if ($5 == price) {
    company = company "\n" $2
  }
}
END { 
  print company
}' file
0 голосов
/ 28 октября 2018

с awk и друзьями

$ sort -t';' -k2,2 -k5,5nr file              | 
  awk -F';' '!a[$2]++{print $1 "\t" $2,$NF}' | 
  sort -n                                    | 
  cut -f2-

clientid price
fooclient 100
AXISX 75000
Fcebook 65000
booclient 200
xyzzycompany 35000
testclient 25000
Mouccccccc 300
Deeccccccc 10
ICICT 45000

конечно, вы также можете делать все в awk.

без поддержки заказа (предполагается, что цены> 0)

$ awk -F';' 'a[$2]<$NF {a[$2]=$NF} 
             END       {for(k in a) print k,a[k]}' file

clientid price
fooclient 100
ICICT 45000
Deeccccccc 10
xyzzycompany 35000
Fcebook 65000
testclient 25000
booclient 200
Mouccccccc 300
AXISX 75000

Если вам просто нужен клиент по самой высокой цене, вам не нужна вся эта сложность

$ sort -t';' -k5,5nr file | sed 1q | cut -d';' -f2
AXISX
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...