我有一个登录文件,我要提取特定的模式。我需要找到然后处理他们进入一个新的文件。查询在Linux上通常会做的伎俩,但经常表达的跨越多条线路,这是我查询了解不这样做。

这里是一个例子,从我的日志/debug文件:


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但是,如果我必须去到Linux的我会得到这个工作。

有帮助吗?

解决方案 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,它不支持重新定向和管道,我知道。这也使用于我收集的任何产出,我需要诊断的程序。再次感谢你们。

其他提示

这是一个很好的候选人 awk, perl 等等 状态分析 (这些将运行在这两个窗口的 CMD.EXE, 您 perl 和/或 awk/sed 在你 PATH, 以及,当然,在Linux和unix系统其他):

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或蟒蛇或宝石或PHP写的脚本相当容易。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top