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脚本?