【问题标题】:Using sed script to generate an awk script使用 sed 脚本生成 awk 脚本
【发布时间】:2018-08-19 07:34:45
【问题描述】:

我正在寻找一种使用 sed 生成 awk 文件的方法。手头的问题是,我有一个包含大约 1000 行单词的文本文件,我希望能够从文本文件中提取每一行并将提取的单词用作 awk 文件中的正则表达式。

例如,文本文件将显示:

James    Class1
Toby     Class3
Callum   Class4
Sarah    Class1
Jeremiah Class2

使用 sed 输出到 awk 应该是这样的

/ reg exp for James/ {action matching word has Class1}
/ reg exp for Toby / {action matching word has Class3}
/ reg exp for Callum / {action matching word has Class4}
/ reg exp for Sarah / {action matching word has Class1}

我尝试使用 sed 提取所有单词,但似乎找不到将其写入 awk 文件的方法!

【问题讨论】:

  • 欢迎来到 SO,不清楚,为什么需要 sed 来创建 awk 程序?请在您的帖子中提供更多详细信息,然后让我们知道。
  • 另外请确认您是否真的要打印文本action matching word has Class1 等,或者您希望将实际代码打印在脚本等中的某些条件,以便稍后执行?
  • 感谢您的帮助 Ravinder,基本上任务是创建一个 sed 文件,该文件会生成多行 awk 代码,用于计算特定学生的数量。最终输出应该能统计出class1、class2和class3有多少学生。
  • XY 问题是询问您尝试的解决方案,而不是您的实际问题。
  • I'm looking for a way to generate an awk file using sed. - 零意义。如果您可以使用 sed 解析输入文件,那么您当然可以使用 awk 解析它,如果您可以生成一个 awk 脚本来从 sed 执行某些操作,那么您可以编写 awk 脚本来执行任何操作。告诉你的老师想出一个更有用/更现实的练习。

标签: bash awk sed


【解决方案1】:

看看这个GNU awk(由于@EdMorton指出的多维数组语法,仅适用于GNU awk):

awk '{ a[$2][$1]++ }
END {
    for(i in a) {
        sum=0
        printf "=== %s ===\n", i
        for(j in a[i]) {
            sum+=a[i][j]
            printf "%s: %d\n", j, a[i][j]
        }
        printf "> %d\n", sum
    }  
}' data

示例:

$ cat data
Sarah    Class1
James    Class2
Sarah    Class1
Sarah    Class2
Peter    Class1
$ ./script
=== Class1 ===
Sarah: 2
Peter: 1
> 3
=== Class2 ===
James: 1
Sarah: 1
> 2

【讨论】:

  • @EdMorton 好点,将其编辑到我的答案中。欢迎任何其他建议:)
猜你喜欢
  • 2013-08-17
  • 2013-06-15
  • 2011-02-22
  • 2011-12-11
  • 1970-01-01
  • 2018-07-02
  • 2013-10-26
  • 2022-11-30
  • 1970-01-01
相关资源
最近更新 更多