是否有针对.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?