Как разделить метки времени из файла?

[

] Мне удалось это выяснить, и я решил добавить это сюда для следующего гуглера, который бьется головой об ту же самую стену. [

] [

] У меня был набор псевдонимов grep [] и [] [] GREP_OPTIONS []. Это привело к тому, что цветовая подсветка оставалась в скрипте, даже при переходе к другой команде. Обычно это не очень хорошо работает с []sed[].[

] [

]Вот мой .alias и опции:[

] [
alias grep='grep -i --color'
export GREP_OPTIONS="--color=always"
] [

]Так что при запуске из скрипта, он не использует команду с псевдонимом и поэтому заставляет цвет всегда быть включенным. Поэтому, когда я проверил свой псевдоним и увидел опцию []--color[] (что означает []auto[]), это означает "не выводить цвет, который попадает в другую команду" (как []- sed[]). [

] [

] Я был сбит с толку, потому что забыл, что я также установил []GREP_OPTIONS[], поэтому я ожидал, что []grep[] в сценарии будет иметь цвет []auto[], установленный по умолчанию на []auto[] (как это было бы, если бы я не установил глобальную []GREP_OPTIONS[]). Но не так.[

] [

]Вот мои новые настройки (я считаю, что флаг []-color[] на []GREP_OPTIONS[] является избыточным, но я оставляю его там в качестве напоминания):[

] [
alias grep='grep --color=always'
export GREP_OPTIONS="--ignore-case --color"
] [

]Таким образом, в любой момент, когда я нахожусь в командной строке, у меня будет подсветка для всех моих greps (что, как правило, и есть то, что я хочу). Но в скриптах по умолчанию раскрашивание будет выполняться только тогда, когда не будет произведена привязка к другой команде. Мне всё равно придётся добавлять --color=всегда для многих моих сценариев (так как я обычно предпочитаю подсветку в большинстве случаев, даже при подключении к другой команде, если только я никогда не вижу результат)[

].
1
22.04.2015, 00:26
2 ответа

Это предназначено для замены всех Хотя цикл в вашем скрипте:

awk '{print substr($0, 31)>("replay_message_" NR-1 ".txt")}' file

Как он работает:

  • Печать Substr ($ 0, 31)

    Это отпечатывает все, кроме первые тридцать тридцать символов строки.

  • > («replay_message_" NR-1 ".txt")

    Это отправляет, что было напечатано в файл, названный в честь номера строки.

Когда команда awk закончится запущена, появится серия файлов в вашем каталоге, например:

$ ls -1 replay_message*
replay_message_0.txt
replay_message_1.txt
replay_message_2.txt
replay_message_3.txt

альтернатива в случае, если длина метки изменяется

awk '{sub(/.* E[SD]T [[:digit:]]{4}: /, ""); print >("replay_message_" count++ ".txt")}' file

, как это работает

awk, неявно считывает файл один запись (линия) за раз. Для каждой строки:

  • Sub (/.* EDT [[: TIGIT:]] {4}: /, "")

    Это удаляет временную точку от начала строки.

    REGEX соответствует всем до места, часовой пояс (либо EST или EDT), пространство, четыре цифры за год, толстой кишки и пространство.

    В качестве альтернативы, если он гарантировал, что ваш Timestamp занимает только 30 символов, то можно использовать более простое замещение:

     Sub (/. {30} /, "")
     

    На основании ваших входных файлов вам придется решить, что лучше всего соответствует вашей ситуации.

  • Печать> («Replay_Message_» Count ++ «.txt»)

    Это записывает модифицированную строку в файл, который включает в себя значение . ++ вызывает значение , чтобы быть увеличенным к каждой записи.

0
27.01.2020, 23:37

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

cut -d ' ' -f 7-

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

cut -c 31-

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

sed 's/.*[0-9]: //'

Если у вас есть более специфические требования, вы можете упомянуть их.

2
27.01.2020, 23:37

Теги

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