Предполагая, что ваше упоминание «последовательной консоли» относится к minicom, вполне вероятно, что minicom не работает с UTF -8 (, а это то, что типичная локаль указывает ncurses для используйте :см. обсуждениеNCURSES_NO_UTF8_ACS
)на странице руководства. Если вы используете локаль POSIX (, то есть LC _ALL=C ), тогда ncurses не будет пытаться использовать отрисовку линий Unicode -и, как правило, соответствует ограничениям minicom. Некоторые локали, отличные от -UTF -8, такие как en_US
, также могут работать.
vim не пытается рисовать линии, поэтому вы не заметите проблемы с этим (хотя некоторые плагины могут это делать, вопрос не упоминает этот аспект ).
Если вам нравятся конвейеры 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
взята из этого поста на этом сайте.
Если ваши данные, как вы говорите, уже упорядочены по дате и последовательно структурированы, вы можете использовать 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;
Теперь, когда ваш составной вывод находится в пространстве шаблонов, просто удалите ненужные \n
ewline и p
rint
s/\n//;p}" file