Я пытаюсь сравнить два файла, на основе столбца id,
A.txt содержит ID, поля NAME.
B. csv содержит ID, NAME, PLACE, DATE,
Я хочу найти, в каком месяце было большинство ID из a.txt
Я пытаюсь сделать это в команде shell.
Вы можете использовать csvsql
(из пакета csvkit
на основе Python):
$ 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 ex.:
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