Есть ли способ получить диапазон дат из CSV-файла?

Предполагая, что ваше упоминание «последовательной консоли» относится к minicom, вполне вероятно, что minicom не работает с UTF -8 (, а это то, что типичная локаль указывает ncurses для используйте :см. обсуждениеNCURSES_NO_UTF8_ACS)на странице руководства. Если вы используете локаль POSIX (, то есть LC _ALL=C ), тогда ncurses не будет пытаться использовать отрисовку линий Unicode -и, как правило, соответствует ограничениям minicom. Некоторые локали, отличные от -UTF -8, такие как en_US, также могут работать.

vim не пытается рисовать линии, поэтому вы не заметите проблемы с этим (хотя некоторые плагины могут это делать, вопрос не упоминает этот аспект ).

0
21.09.2020, 23:03
2 ответа

Если вам нравятся конвейеры Unix, вы можете сделать это следующим образом:

# standalone example: this converts from a 2-colum, 1-line "csv" to unixtime, 
#  and converts back to readable date
echo "2,1/25/2012  7:20:55 PM" \
| perl -aF, -MDate::Parse -E "say Date::Parse::str2time(\$F[1])" - \
| xargs -i date "+%D " -d@{}

# result
01/25/12

Это основано на старом, но не -основном модуле Perl Date::Parse, который необходимо сначала установить, если он еще не установлен.
Возможна установка с cpan Date::Parseили с нулевым -конфигурационным клиентом cpanm Date::Parse.

Итак, для вашего примера вы можете попробовать получить самый молодой и самый старый в двух отдельных строках

perl -aF, -MDate::Parse -E "say Date::Parse::str2time(\$F[5])" *.csv \
| sort \
| sed -e 1b -e '$!d'  \
| xargs -i date "+%D " -d@{}

# result
01/25/12 
11/07/16

Строка sedвзята из этого поста на этом сайте.

0
18.03.2021, 23:04

Если ваши данные, как вы говорите, уже упорядочены по дате и последовательно структурированы, вы можете использовать sedдля работы с конкретными строками:

sed -E -n "2 {s/.*,([^ ]*).*/\1 - /;h}; $ {s/.*,([^ ]*).*/\1/;H;x;s/\n//;p}" file

Вывод для вашего первого файла:

1/26/2012 - 4/11/2012

Чтобы сделать все файлы вместе, просто catих (предполагается назвать в порядке дат и передать в правильной последовательности )как

cat file* | sed...
1/26/2012 - 11/7/2016

Прохождение

Установить sed по умолчанию как -nне печатать

sed -E -n "

Захватите 2й строку и соберите часть строки, которую вы хотите ([^ ]+)как группу захвата, и составьте свой вывод в пространстве шаблонов как ваш захват и ваш разделитель\1 -

           2 {s/.*,([^ ]+).*/\1 - /;

Вставить это в hстарое пространство(hочистить все, что было там раньше)

                                h}; 

На линии la $t захватите часть строки, которую вы хотите, снова в пространстве шаблонов

                                    $ {s/.*,([^ ]+).*/\1/;

Добавить новое пространство шаблона к Hстарому пространству с \nлинией перехода между старым и новым содержимым(Hдобавить \nлинию перехода ), а затем xизменить все содержимое удерживать пространство с пространством шаблона

                                                H;x;

Теперь, когда ваш составной вывод находится в пространстве шаблонов, просто удалите ненужные \newline и print

                                                    s/\n//;p}" file
1
18.03.2021, 23:04

Теги

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