Parsing cygwin中的命令行文件解析工具

Parsing cygwin中的命令行文件解析工具,parsing,cygwin,Parsing,Cygwin,我必须处理各种格式的文本文件。下面是一个示例(列A和B以制表符分隔): 这些文件可以有头,也可以没有头,可以有混合的定界方案,可以有如上所述的名称/值对的列。 我经常需要以各种方式从这些文件中提取数据。例如,从上面的数据中,我可能需要与Name2关联的值。i、 e A B a Val2 c Val7 有哪些工具/技术可以执行单行命令这样的操作,以上述为例,但可以扩展到其他情况?您可以使用所有基本的bash shell命令,例如grep、cut、sed和awk。您也可以使用Perl或

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

这些文件可以有头,也可以没有头,可以有混合的定界方案,可以有如上所述的名称/值对的列。
我经常需要以各种方式从这些文件中提取数据。例如,从上面的数据中,我可能需要与Name2关联的值。i、 e

A   B
a   Val2
c   Val7

有哪些工具/技术可以执行单行命令这样的操作,以上述为例,但可以扩展到其他情况?

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

根据我所看到的,我会从Awk开始处理这类事情,如果您需要更复杂的事情,我会使用Python。

我会使用sed:

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

既然你有cygwin,我就用Perl。它是最容易学习的(请参阅O'Reily的书:)并且广泛适用。

我不太喜欢sed,但它适用于以下情况:

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

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

perl -e 'use Parser;' -e 'parser("in.input").get("Name2");'
不要在语法上引用我的话,但这是大意。抽象手头的任务,让你思考你需要做什么,而不是如何去做。Ruby将是另一种选择,它倾向于有一个更干净的语法,但这两种语言都可以工作

 A B
 a Val2
 c Val7
perl -e 'use Parser;' -e 'parser("in.input").get("Name2");'