嵌入式awk for .NET?

时间:2014-01-19 16:35:20

标签: c# .net scripting awk embed

是否有针对.NET的AWK实现?

更具体地说,这是我想要解决的问题类型的一个例子:

Article number        Price          Package day
10.1002-50            $50            Tuesday
10.1002-51            $40            Monday
10.1002-52            $50
10.1002-53            $50            Tuesday
#start prepackaged
20.2001-51            $1             Monday
20.2001-52            $30            Tuesday
10.1002-54            $10            Tuesday
10.1002-55
#end prepackaged
10.1001-50
10.1002-50            $50            Friday
10.1003-50
10.1004-50

我想获得文章编号,但跳过预先打包的文章。

以下是我用C#中提供的AWK实现可以解决的问题:

using Awk.Extensions;
string[][] output = System.IO.File.ReadLines("C:\Temp\input.txt")
    .Skip(1)
    .Awk("/start prepackaged/,/end prepackaged/ {next}; {print $1}")
    .Select(fields => fields[0])
    .Distinct()
    .ToArray();

foreach(var item in output)
{
    Console.WriteLine(item);
}

这将理想地产生输出:

10.1002-50
10.1002-51
10.1002-52
10.1002-53
10.1001-50
10.1003-50
10.1004-50

是否存在类似的东西?是否有一些其他强大的,基于行的.NET脚本库我应该考虑?

进一步调查显示,Jawk, a Java implementation of awk还可以将AWK脚本编译为Java字节码!似乎有一个direct port of this to C#,虽然看起来不太成熟。

Java的另一个项目awk4j

private static void case03() throws ScriptException {
  ScriptEngine engine = new ScriptEngineManager().getEngineByName("awk4j");
  CompiledScript obj = ((Compilable) engine).compile("BEGIN{ printf ARGV[1] }");  // コンパイル
  engine.put(ScriptEngine.ARGV, new String[] { "hello," });
  obj.eval();  // コンパイル済みのスクリプトを実行
  engine.put(ScriptEngine.ARGV, new String[] { "world!\n" });
  obj.eval();
}

以下是类似的问题: Is there a .NET library which will give me the ability to run awk scripts in a .NET environment?

1 个答案:

答案 0 :(得分:2)

AWK for .NET。 AWK很棒,我在Linux上使用它。