Lọc văn bản cụ thể từ tệp nhật ký


5

Vì vậy, tôi có một tệp nhật ký từ trò chuyện Twitch và tôi muốn tạo một đám mây từ, để làm điều này tôi chỉ muốn các văn bản theo tên của họ, vd.

[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

Tôi muốn xử lý toàn bộ tệp để ngày và tên bị xóa vì vậy tôi chỉ còn 3 dòng

test1
test2
lol

Điều này có thể có trong windows CMD? Hoặc có điều gì khác tôi nên làm?


Bạn có phiền khi chạy powershell thay vì CMD không?
tanantish

chắc chắn, bất cứ điều gì
người bạn của bạn

Bạn có thể làm điều này với bất kỳ ngôn ngữ lập trình nào với sức mạnh của regex
Dudemanword

Câu trả lời:


6

(EDIT: Để rõ ràng, như David đã lưu ý, điều này sẽ không hoạt động trong trình cmdthông dịch windows chung . Đây là phần nhiều hơn của một lớp lót quyền hạn)

Bạn có thể làm một cái gì đó như thế này:

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

Đã dịch: đọc nội dung của chat.log, sau đó chuyển nó thành một lệnh để thay thế bất cứ thứ gì trông giống dấu thời gian / tên người dùng ở phía trước của mỗi dòng và đưa kết quả vàowords.txt

Tôi cũng đoán, rằng đối với những trường hợp kỳ lạ như:

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

bạn muốn có được

test2 message

thay vì

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


@friendman "Điều này có thể có trong windows CMD không?" - Hãy chia sẻ làm thế nào điều này hoạt động trong cmd ... nó trông giống như một giải pháp bash (hoặc cywin) không phải là những gì bạn yêu cầu.
DavidPostill

@DavidPostill Tôi đã hỏi trong các bình luận nếu powershell là một tùy chọn (và rõ ràng là vậy) và câu hỏi là "Điều này có khả thi trong windows CMD không? Hoặc tôi có nên làm gì khác không?"
tanantish

@DavidPostill Chỉ để rõ ràng, hãy thêm một chỉnh sửa vào câu trả lời của tôi để làm rõ rằng tôi sẽ không tìm cmdgiải pháp. Đây là một giải pháp quyền hạn
tanantish

Đủ công bằng. Tôi thấy rõ ràng đó là một powershellkịch bản :(
DavidPostill

@DavidPostill Tôi phải thừa nhận rằng nó khá ngắn gọn, * cú pháp giống như NIX (và regexps không bao giờ đẹp như vậy) nhưng tôi đã thấy nó là một mẫu tiện dụng đáng ngạc nhiên cho những thứ vứt đi như thế này.
tanantish

1

Tương tự như câu trả lời của DavidPostill , nhưng bạn có thể sử dụng ký tự đại diện để xóa mọi thứ trước chuỗi con.

@echo off

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

Truyền tên tệp văn bản vào tập lệnh khi bạn gọi nó (hoặc thay thế% 1 bằng tên tệp văn bản của bạn).


1

Làm cách nào để lọc văn bản cụ thể từ tệp nhật ký?

[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

Nếu các dòng luôn ở cùng định dạng, bạn có thể sử dụng tệp bó sau.

kiểm tra.cmd:

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

đầu vào:

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>

đầu ra:

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

C:\test>

ghi chú:

  • được mã hóa cứng với tệp đầu vào log.txtvà tệp đầu ra filtered.txt, bạn có thể chuyển các tên này vào tệp bó làm tham số.
  • với định dạng bạn đã cung cấp văn bản bạn muốn trích xuất là mã thông báo thứ 4 khi dấu phân cách là dấu hai chấm ( :).
  • set _txt=%%atheo sau !_txt:~1!được sử dụng để tước không gian sau lần thứ 4 :.

0

Đây là lựa chọn cá nhân của tôi bằng PythonPy . Hoạt động trên nhiều hệ điều hành và bạn có thể sử dụng lại kiến ​​thức Python của mình. Ngay cả khi bạn không biết Python học thì sẽ dễ hơn là dành thời gian với những thứ Awk & Sed.

Đây là cách bạn cần bắt đầu.

  1. Cài đặt PythonPy cho windows

    pip install pythonwpy

  2. Sử dụng lệnh này type test | wpy -x 'print(x.split(" ")[-1])'để phân tích tệp nhật ký của bạn.

Đây là những gì tôi đã thử và có:

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. Bạn có thể tìm hiểu nhiều tính năng thú vị hơn cho Windows tại đây và cho Linux / OSX tại đây


0

Không phải là một giải pháp cmd và Powershell yêu thương nhưng đây thực sự là một trong những pháo đài của vim.

%s/.*:_ 

và bạn đã hoàn thành.

_ là nhân vật không gian

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.