是否有 .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?
最佳答案
有AWK for .NET . AWK 很棒,我在 Linux 上使用它。
关于c# - .NET 的嵌入式 awk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21219463/