c# - .NET 的嵌入式 awk?

标签 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?

最佳答案

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

关于c# - .NET 的嵌入式 awk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21219463/

相关文章:

c# - 将图像写入 Process.StandardInput.BaseStream 的更快方法

c# - 由外键 ef 4.3 组成的代码优先组合键

linux - awk 命令修改文件中的列

c# - 用于检查多个值是否相等的语法糖

linux - 使用&&和||时如何执行exit命令?

python - 从 python 脚本但在 python 脚本之外运行 python 脚本

c# - 在单元测试中设置 IHostingEnvironment

c# - Bootstrap 导航栏折叠到后期

asp.net - 获取下拉列表中选中项的值

c# - 模拟时无法将 "comctl32.dll"DLL 加载到内存中