用于在cygwin中解析命令行文件的工具

时间:2008-09-17 11:47:43

标签: parsing cygwin

我必须处理各种格式的文本文件。以下是一个示例(列 A B 是制表符分隔符):

A   B
a   Name1=Val1, Name2=Val2, Name3=Val3
b   Name1=Val4, Name3=Val5
c   Name1=Val6, Name2=Val7, Name3=Val8

文件可以包含或不具有标题,具有混合分隔方案,具有如上所述的具有名称/值对的列等 我经常需要以各种方式从这些文件中提取数据。例如,根据上面的数据,我可能想要与Name2相关联的值。即。

A   B
a   Val2
c   Val7

有哪些工具/技术用于执行这样的操作作为一个行命令,使用上面的示例但可扩展到其他情况?

6 个答案:

答案 0 :(得分:1)

您拥有所有基本的bash shell命令,例如grep,cut,sed和awk。您还可以使用Perl或Ruby来处理更复杂的事情。

答案 1 :(得分:1)

我不喜欢sed太多,但它适用于这样的事情:

var="Name2";sed -n "1p;s/\([^ ]*\) .*$var=\([^ ,]*\).*/\1 \2/p" < filename

给你:

 A B
 a Val2
 c Val7

答案 2 :(得分:0)

从我所看到的,我开始使用Awk来做这类事情然后如果你需要更复杂的东西,我就会进步到Python。

答案 3 :(得分:0)

我会用sed:

   # print section of file between two regular expressions (inclusive)
   sed -n '/Iowa/,/Montana/p'             # case sensitive

答案 4 :(得分:0)

因为你有cygwin,我会选择Perl。这是最容易学习的(查看O'Reily书:Learning Perl)并广泛适用。

答案 5 :(得分:0)

我会使用Perl。编写一个小模块(或多个模块)来处理不同的格式。然后,您可以使用该库运行perl oneliners。它的例子 如下所示:

perl -e 'use Parser;' -e 'parser("in.input").get("Name2");'

不要引用我的语法,但这是一般的想法。摘要手头的任务,让您根据自己的需要进行思考,而不是根据自己的需要进行思考。 Ruby将是另一种选择,它往往具有更清晰的语法,但任何一种语言都可以使用。

相关问题