5

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

[Jun 01 2015 02:23:58 UTC] swimsphinx: test1
[Jun 01 2015 02:24:15 UTC] swimsphinx: test2
[Jun 01 2015 02:27:36 UTC] swimsphinx: lol

Я хочу обработать весь файл так, чтобы дата и имя были удалены, поэтому мне осталось 3 строки

test1
test2
lol

Возможно ли это в Windows CMD? Или есть что-то еще, что я должен сделать?

5 ответов5

6

(РЕДАКТИРОВАТЬ: просто для ясности, как отметил Дэвид, это не будет работать в общем интерпретаторе Windows cmd . Это больше однострочник PowerShell)

Вы могли бы сделать что-то вроде этого:

cat chat.log | %{$_ -replace "\[[^]]*\] +[^ ]*: ",""} > words.txt

Переведено: прочитайте содержимое chat.log , затем передайте это в команду, чтобы заменить все, что похоже на отметку времени / имя пользователя, в начале каждой строки и поместить результат в words.txt

Я также предположил, что для нечетных случаев, таких как:

[Jun 01 2015 02:24:15 UTC] swimsphinx: test2 [Jun 01 2015 02:24:15 UTC] swimsphinx: message

ты хочешь получить

test2 message

скорее, чем

test2 [Jun 01 2015 02:24:15 UTC] swimsphinx: message

1

Аналогичен ответу DavidPostill , но вы можете использовать подстановочный знак, чтобы удалить все перед подстрокой.

@echo off

setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (%1) do (
    set line=%%a
    echo !line:*swimsphinx: =!
)
endlocal

Передайте имя текстового файла в скрипт при его вызове (или замените% 1 на имя вашего текстового файла).

1

Как отфильтровать определенный текст из файла журнала?

[Jun 01 2015 02:23:58 UTC] swimsphinx: test1
[Jun 01 2015 02:24:15 UTC] swimsphinx: test2
[Jun 01 2015 02:27:36 UTC] swimsphinx: lol

Если строки всегда в одном и том же формате, вы можете использовать следующий пакетный файл.

test.cmd:

echo off
Setlocal EnableDelayedExpansion
for /f "tokens=4 delims=:" %%a in (log.txt) do (
  set _txt=%%a
  echo !_txt:~1! >> filtered.txt
  )

вход:

C:\test>type log.txt
[Jun 01 2015 02:23:58 UTC] swimsphinx: test1 abc
[Jun 01 2015 02:24:15 UTC] swimsphinx: test2
[Jun 01 2015 02:27:36 UTC] swimsphinx: lol

C:\test>

выход:

C:\test>type filtered.txt
test1 abc
test2
lol

C:\test>

заметки:

  • жестко запрограммированный с помощью входного файла log.txt и выходного файла filtered.txt , вы можете передать эти имена в пакетный файл в качестве параметров.
  • с форматом вы предоставили текст , который вы хотите извлечь это четвёртая маркер , когда разделитель является двоеточие :
  • set _txt=%%a а затем !_txt:~1! используется для удаления пространства после 4-го :
0

Не CMD решение и любящий Powershell, но на самом деле это одна из сильных сторон Vim.

%s/.*:_ 

и вы сделали.

_ будучи символом пробела

0

Вот мой личный выбор с использованием PythonPy. Работает на нескольких ОС, и вы можете использовать свои знания Python. Даже если вы не знаете, как изучать Python, это будет проще, чем проводить время с Awk & Sed.

Вот как вам нужно начать.

  1. Установите PythonPy для Windows

    pip install pythonwpy

  2. Используйте этот тип команды type test | wpy -x 'print(x.split(" ")[-1])' для анализа вашего файла журнала.

Вот что я попробовал и получил:

nehemiah@neo ~> type test.txt
[Jun 01 2015 02:23:58 UTC] swimsphinx: test1
[Jun 01 2015 02:24:15 UTC] swimsphinx: test2
[Jun 01 2015 02:27:36 UTC] swimsphinx: lol
nehemiah@neo ~> type test.txt | wpy -x 'x.split(" ")[-1]'
test1
test2
lol

3. Вы можете узнать гораздо больше интересных возможностей для Windows здесь и для Linux/OSX здесь

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .