我正在尝试根据 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