AWK脚本以查找最大数目

AWK脚本以查找最大数目,awk,scripting,Awk,Scripting,需要帮助使用awk查找具有clientid名称的最高价格 已尝试的选项: 文件名:invoices_input.txt[具有上述所有值] 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;foocli

需要帮助使用awk查找具有clientid名称的最高价格

已尝试的选项: 文件名:invoices_input.txt[具有上述所有值]

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 'BEGIN { FS = ";" } !/^#/ {print $2 " " $NF}' invoices_input.txt

我希望AXISX打印为编号最高的客户端。

awk
和朋友一起使用

fooclient 100
booclient 200
xyzzycompany 35000
testclient 190
fooclient 100
testclient 25000
Mouccccccc 300
Deeccccccc 10
ICICT 45000
AXISX 75000
Fcebook 65000
当然,您也可以在
awk
中完成所有操作

不维护订单(假设价格>0)


awk
和朋友

fooclient 100
booclient 200
xyzzycompany 35000
testclient 190
fooclient 100
testclient 25000
Mouccccccc 300
Deeccccccc 10
ICICT 45000
AXISX 75000
Fcebook 65000
当然,您也可以在
awk
中完成所有操作

不维护订单(假设价格>0)

尝试:

尝试:


>XXXXX~$awk-F\;'{if($5>price){price=$5;company=$2}}END{print company}发票\u input.txt>clientid>XXXXX~$cat invoices\u input.txt>\\ id;clientid;产品名称;数量;价格>1;食品客户;产品A;3.100 > 2;booclient;产品B;4.200 > 3;XYZZY公司;产品C;2.35000 > 4;测试客户端;产品B;1.190 > 5;食品客户;产品A;10;100 > 6;测试客户端;产品B;1.25000 > 7;MOUCCCCCC;产品C;2.300 > 8;DEECCCCCC;产品C;2.10 > 9;ICCT;乘积Z;12;45000 > 10;AXISX;产品D;14;75000 > 11;电子书;乘积Z;12;65000这不是预期的结果;它只是在第一行打印clientid。但是awk脚本应该查找最高值条目并打印clientid条目。希望这有助于理解我所面临的困境:(输出在您编写它的文件中。@oguzismail感谢它起作用了。如果我们有两个客户端的相同最高数字,脚本似乎只进行了第一次匹配。如果我们要在具有相同最高数字的位置打印所有clientID,是否有任何条件需要调整?但是代码足够清晰,熟悉该程序的任何人都可以理解ing.>XXXXX~$awk-F\;“{if($5>价格){price=$5;company=$2}}结束{print company}”'invoices\u input.txt>clientid>XXXXX~$cat invoices\u input.txt>id;clientid;产品名称;数量;价格>1;fooclient;产品A;3;100>2;booclient;产品B;4;200>3;xyzzycompany;产品C;2;35000>4;测试客户机;产品B;1;190>5;fooclient;产品A;10;100>6;测试客户机;产品B;1;25000>7;MOUCCCCCC;产品C;2;300>8;DEECCCC;PRODUUct C;2;10>9;ICICT;product Z;12;45000>10;AXISX;product D;14;75000>11;Fcebook;product Z;12;65000结果与预期不符;它只是在第一行打印clientid。但是awk脚本应该查找最高值条目并打印clientid条目。希望它能帮助理解我所面临的困难:(输出在您编写它的文件中。@oguzismail感谢它起作用了。如果我们有两个客户端的相同最高数字,脚本似乎只进行了第一次匹配。如果我们要在具有相同最高数字的位置打印所有clientID,是否有任何条件需要调整?但是代码足够清晰,熟悉该程序的任何人都可以理解但我只是想得到AxisX75000,也就是说,它应该只打印ClientIdAxisX,它可以忽略数字。但我只是想得到AxisX75000,也就是说,它应该只打印ClientIdAxisX,它可以忽略数字。尝试使用awk-F';''NR==1{max=$NF+0;next}{if($NF max)max=$NF;}END{print max}'invoices_input.txt 75000产生了最高的数字,但我期望的是clientID not number。尝试了awk-F';'NR==1{max=$NF+0;next}{if($NF>max)max=$NF;}END{print max}产生了最高数字的invoices_input.txt 75000,但我期望的是clientID not number。
$ 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
awk -F\; 'NR > 1 {
  if ($5 > price) {
    price = $5
    company = $2
  }
  else if ($5 == price) {
    company = company "\n" $2
  }
}
END { 
  print company
}' file