awk - 使用 awk 查找客户购买的唯一字符
问题描述
我有这样的日志文件(它们之间只有空间,但为了便于阅读,我改变了它):
Customer Car Bought
François Nissan Pajero 28/05/2016
Matthew Mercedes S 10/01/2019
Andrew Peugeot 508 05/0/2000
Matthew Toyota Hilux 02/10/2012
我需要制作一个 awk 脚本,为每个客户显示他购买的汽车,如下所示:
Matthew, car bought: Mercedes S,Toyota Hilux, number of cars: 2
Francois, car bought: Nissan Pjero, number of cars: 1
我不知道该怎么做。
我想我应该为客户创建一个数组,为汽车创建一个数组,并用行数对其进行索引
awk ' { Customer[NR]=$1; Car[NR]=$2} END {}'
我应该在END中添加什么,我有点困惑
我也想过这样做:
awk ' { Customer[$1]=$2} END { for (i in Customer) print i,Customer[i]}'
这个数组的问题,它会破坏客户索引数组中汽车的先前值。
解决方案
假设每个客户确实有一个单字名称,如您的示例中所示并且由您的代码暗示(如果没有,那么我们将使用固定宽度字段解析来识别字段 - 请参阅https://stackoverflow.com/a /31947741/1745001 ):
$ cat tst.awk
NR>1 {
gsub(/^[[:space:]]+|[[:space:]]+$/,"")
cust = $1
gsub(/^[^[:space:]]+[[:space:]]+|[[:space:]]+[^[:space:]]+$/,"")
cars[cust,++numCars[cust]] = $0
custs[cust]
}
END {
for (cust in custs) {
printf "%s, car bought: ", cust
for (carNr=1; carNr<=numCars[cust]; carNr++) {
printf "%s,", cars[cust,carNr]
}
printf " number of cars: %d\n", numCars[cust]
}
}
$ awk -f tst.awk file
Andrew, car bought: Peugeot 508, number of cars: 1
Matthew, car bought: Mercedes S,Toyota Hilux, number of cars: 2
François, car bought: Nissan Pajero, number of cars: 1
如果给定的客户在多个日期购买相同类型的汽车(例如标致 508),则上述内容将全部列在输出中/计算在内。
推荐阅读
- javascript - 高图表无法动态添加系列
- j - @ (atop) 的 LHS 似乎与 @: (at) NB 一样应用于整个列表。+/@(*:@:mdev)
- php - 为什么 ftp_chmod() 会抛出“未实现”错误?
- python - 如何在python中将提取的Web数据转换为csv文件
- php - 如何在 PHP 中添加购物车总数
- extjs - Sencha ExtJS 如何在同一行上有两个按钮和文本
- java - 创建自定义列表视图,但值包含“@”和看起来像 C 指针的东西
- javascript - iOS移动iPhone的按钮复选框双击问题
- axapta - 无法将字段添加到表单的字段组
- excel - DOORS DXL 导出到 .xlsx 不可读...Word 中除外