嵌入式awk for .NET?

joh*_*ohv 8 .net c# embed scripting awk

是否有针对.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
Run Code Online (Sandbox Code Playgroud)

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

以下是我可以想象用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);
}
Run Code Online (Sandbox Code Playgroud)

这将理想地产生输出:

10.1002-50
10.1002-51
10.1002-52
10.1002-53
10.1001-50
10.1003-50
10.1004-50
Run Code Online (Sandbox Code Playgroud)

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

进一步调查显示,有一个awk的Java实现Jawk,它也可以将AWK脚本编译为Java字节码!似乎有一个直接的端口这个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();
}
Run Code Online (Sandbox Code Playgroud)

这是一个类似的问题:是否有一个.NET库可以让我在.NET环境中运行awk脚本?

paw*_*lek 4

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