2017-02-01 6 views
2

У меня есть файл, как это:Как преобразовать CSV-файл на основе даты в электронную таблицу?

100,2015-09-01 
100,2015-09-02 
105,2015-09-01 
645,2017-01-01 

Это просто номер и дата, разделенная запятая. Он имеет 20000 строк.

Я хочу преобразовать этот файл в электронную таблицу (Google, Excel, LibreOffice, любой формат, даже CSV), который говорит для каждого номера, если он появляется для данной даты. Например:

ID | 2015-09-01 | 2015-09-02 | 2017-01-01 
----+------------+------------+----------- 
100 | YES  | YES  | NO 
105 | YES  | NO   | NO 
645 | NO   | NO   | YES 

Как я могу это сделать?

Я нахожусь в Linux, поэтому утилиты командной строки, такие как sed, awk и т. Д., Являются доступными и предпочтительными в качестве способа автоматизации этого.

+0

Для Excel вы можете просто открыть или импортировать файл csv, а затем разделить его с помощью мастера ввода текста в столбцы; добавьте заголовки столбцов к своему оригиналу, а затем используйте что-то вроде сводной таблицы, чтобы получить нужный результат. Попробуйте и отправьте сообщение с подробностями, если у вас возникнут проблемы. Кроме того, прочитайте страницы HELP для получения информации о [о каких темах я могу спросить здесь?] (Http://stackoverflow.com/help/on-topic), [Как задать хороший вопрос] (http: // stackoverflow.com/help/how-to-ask) и [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) –

+0

Или вы могли бы написать процедуру VBA для сделайте все это и, возможно, получите большую гибкость в определении требуемого результата. –

ответ

1

Может заставить его работать с использованием AWK.

awk -F "," '{ 
    numbers[$1] 
    dates[$2] 
    number_date[$1,$2] 
} END { 
    for (number in numbers) printf ";%s", number; 
    printf "\n" 
    for (date in dates) { 
     printf "%s", date 
     for (number in numbers) 
      if ((number SUBSEP date) in number_date) printf ";YES" 
      else printf ";NO" 
     printf "\n" 
    } 
}' input.csv | sort > output.csv 
0

CSV-эквивалент данных, которые вы добавите (для чтения первенствует) является:

ID,2015-09-01,2015-09-02,2017-01-01 
100,YES,YES,NO 
105,YES,NO,NO 
645,NO,NO,YES 

, как вы можете легко проверить, если вы создаете таблицу и экспортировать его в формат CSV.

Итак, чтобы иметь возможность читать его как CSV, вы должны сначала преобразовать свои данные из формата, который вы отправили, в формат, который я разместил выше, а затем импортировать его как CSV. Это можно сделать с помощью AWK-скрипта, который был отправлен здесь также и @ThiagoNegri, поэтому я больше не буду повторять его.