2013-04-09 42 views
0

说我有类似下面一个txt文件(这显然不是“文字文字文字”,我只是表明这是不相关的文本块)输出txt文件的特定部分到csv?

text text text 
text text text 
text text text 
important section age=30 
name=mike 
text text text 
text text text 
text text text 

我要分析它,并只输出“重要部分”为csv,使我的CSV会是什么样子下面,即年龄在一列名在另一个

age name 
30  mike 

我应该如何着手呢? Perl的?桑达?我不是那么熟悉,但希望有一个足够简单的解决方案。

Choroba实际上回答了上述完美的我,但我担心我过于简单化了我的实际文本文件太多了,它更像是低于

Something: 
this 
Something else: 
that 
Something else: 
etc. 
Sales 
2011 Sales: 
€3,000 

() 
2010 Sales: 
€2,000 

() 
2011 Growth Rate: 
50.00% 

Contact Details 

和输出我会非常喜欢的

2011 Sales 2010 Sales 2011 Growth Rate 
3,000   2,000   50.00% 

不幸的是,这使事情变得非常复杂。输出不一定要与上面完全一样,但尽可能接近

+0

那么,你如何判断一条有意义的线 - 是因为它是从一年开始的?或者因为它最后有一个冒号?欧元符号中的所有行都有意义吗?他们总是在他们面前只有一个空间吗?在你写任何东西之前,你至少需要有规则,以便你和代码确切地知道你感兴趣的内容 – 2013-04-09 15:31:12

+0

编辑过的例子基本上是我想分析的文件的镜像,所以我知道我需要关注在“销售”和“联系方式”之间的所有文字上。然后,我需要创建“2011年销售额”的列(并在其下面的行中包含3,000个),为“2010年销售额”创建一列(包括下面的2000行)等。 – 2013-04-09 16:02:31

回答

1

Perl解决方案。它让我们知道我们是否处于重要部分。所有重要的东西都会被记忆在一个阵列中,并在最后打印:

perl -nE '$i = 1 if s/important section //; 
      push @t, [$1, $2] if $i and /(.*)=(.*)/; 
      }{ 
      for my $i (0, 1) { 
       say join "\t", map $_->[$i], @t 
      }' file.txt 
+0

快速回答,谢谢choroba!这适用于我在这里给出的例子,但我的实际txt文件更加复杂。任何想法如何我可以改变这个为我的实际txt文件工作? – 2013-04-09 15:12:43

+0

@choroba +1,干净和惯用。 '-E'能否在那里启用'说'? – 2013-04-09 15:17:30

+0

@robocode除非您对文件的格式更精确,否则请不要更新您的问题,只需要一个更能代表您实际输入的示例。 – 2013-04-09 15:18:48