Объединить два файла и объединить другой столбец

Я пытаюсь сравнить два файла, на основе столбца id,

A.txt содержит ID, поля NAME.

B. csv содержит ID, NAME, PLACE, DATE,

Я хочу найти, в каком месяце было большинство ID из a.txt

Я пытаюсь сделать это в команде shell.

0
задан 11 October 2020 в 09:47

1 ответ

Вы можете использовать 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
2
ответ дан 7 October 2020 в 14:59

Другие вопросы по тегам:

Похожие вопросы: