문제

특정 패턴을 추출 해야하는 로그 파일이 있습니다. 새 파일로 찾아 처리해야합니다. Linux의 Grep은 일반적으로 트릭을 수행하지만 정규 표현식은 여러 줄에 걸쳐 있습니다.

다음은 로그/디버그 파일의 예입니다.


Da:
1.328   0.5045  

Db:
0.6415  0.1192  

Lambda:
0.4429  -0.35   
-0.0461 -0.02421    

seps:
0.714272

내가 찾고 있어요 /Lambda:\n([-\d\.]+)\s+([\-\d\.]+)\s+\n([\-\d\.]+)\s+([\-\d\.]+)/ 그런 다음 선을 새 파일로 출력하여 Lambda를 제거하고 숫자를 동일한 줄로 재 배열하여 출력을 원합니다. \1\s\2\s\3\s\4\n

그래서 저는 실제로 두 가지 질문이 있습니다.

  1. 어떤 시스템에서도이를 달성하기 쉬운 유틸리티가 있습니까?
  2. Windows에서 구체적으로 수행 할 수있는 방법이 있습니까?

나는 나를 탈출 한 간단한 해결책이 있기를 바라고있다. 차라리 창문에 머물고 싶지만 리눅스에 가야한다면이 작업을 수행 할 것입니다.

도움이 되었습니까?

해결책 3

모든 답변에 감사드립니다. 나는 당신이 Perl과 Awk에 대해 나에게 준 답을 좋아합니다. 나는 Perl을 모르는 이상한 프로그래머 중 하나이므로 루비 노선을 가져갔습니다. 여기 내 해결책이 있습니다

x=ARGV[0]
f=File.new(ARGV[1])
g=File.new(ARGV[2],"w")
f.read.gsub(/#{x}:\s*(([\d\.\-]*\t*)+\n)+/ ){|entry|
    puts entry
    g.puts entry.gsub(/#{x}:\n/,'').gsub(/\s+/,"\t").strip
}

이것은 내가 아는 한 리디렉션 및 배관을 지원하지 않는 NPPEXEC를 통해 편집기 Notepad ++와 함께 유틸리티로 사용할 수 있습니다. 이것은 또한 프로그램별로 진단 해야하는 출력을 수집 할 수 있습니다. 다시 한 번 감사드립니다.

다른 팁

이것은 좋은 후보입니다 awk, perl 그리고 같은 상태가 많은 구문 분석 (이것들은 두 창 모두에서 실행됩니다 CMD.EXE, 당신이 가지고있는 경우 perl 및/또는 awk/sed 당신의 PATH, 물론 Linux 및 기타 유엔에서도) :

awk "/^Lambda/ { in_lambda=1 ; next } in_lambda && /^ *$/ { in_lambda=0 ; printf \"\n\" ; next } in_lambda { printf \"%s \", $0 }" input_file >output_file

또는

perl -ne "chomp; if (/^Lambda/) { $in_lambda = 1 } elsif ($in_lambda && /^ *$/) { $in_lambda=0 ; printf \"\n\" } elsif ($in_lambda) { printf \"%s \", $_ }" input_file >output_file


필요한 경우 두 번째 패스를 수행하여 공백을 정상화하고 (라인 끝에서 공백을 트림)를 수행 할 수 있습니다.

awk "/^Lambda/ { in_lambda=1 ; next } in_lambda && /^ *$/ { in_lambda=0 ; printf \"\n\" ; next } in_lambda { printf \"%s \", $0 }" input_file| sed -e "s: *: :g" -e "s: *$::" >output_file

또는

perl -ne "chomp; if (/^Lambda/) { $in_lambda = 1 } elsif ($in_lambda && /^ *$/) { $in_lambda=0 ; printf \"\n\" } elsif ($in_lambda) { printf \"%s \", $_ }" input_file| perl -ne "s/ +/ /g; s/ +$//g; print" >output_file

Perl, Python, Ruby 또는 PHP를 설치하고 스크립트를 상당히 쉽게 쓸 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top