合并两个文件并聚合另一列

合并两个文件并聚合另一列

我正在尝试根据 id 列比较两个文件,

A.txt包含ID,NAME字段。

B.csv 包含 ID、NAME、PLACE、DATE、

我想从 a.txt 中找出哪个月份的 ID 最多

我正在尝试在 shell 命令中执行此操作。

答案1

您可以使用csvsql(来自基于 Python 的csvkit包):

$ csvsql --query '
  SELECT strftime("%m",[ DATE]) AS [month], COUNT(*) AS [count]
  FROM A INNER JOIN B ON A.[ID ] = B.[ID]
  GROUP BY [month] ORDER BY [count] DESC LIMIT 1
' A.txt B.CSV
month,count
11,3

请注意,LIMIT 1如果多个月份的计数相同,则可能无法返回您想要的结果。

还要注意,您的字段名称的前导/尾随空格数量似乎不一致。


我认为它不那么优雅,但你当然可以使用 awk 例如:

awk -F, '
  NR==FNR {a[$1]; next} 
  $1 in a {
    # NB not as robust as the csvsql version, which uses a proper strftime
    month = substr($4,2,2); count[month]++
  } 
  END {
    for(m in count){
      if(count[m] > count_max) {
        count_max = count[m]; month = m
      }
    } 
    print month, count[month]
  }
' A.txt B.CSV

相关内容