【发布时间】:2014-02-19 02:15:18
【问题描述】:
对于一个实验室,我编写了一个使用 awk 来做一些事情的 shell 脚本。重读实验室的指示,似乎我应该编写一个独立的 awk 脚本。我正在将我的 bash 脚本翻译成 awk,但我现在遇到了问题:
我想将 awk 命令的输出保存到一个新文件中,然后我想将该输出用作另一个 awk 命令的输入。
在我的 bash 脚本中,我有这个:
awk '/Blocked SPAM/' maillog > spamlog
cat spamlog | awk '{print $0}' RS=' '
它从 maillog 中获取所有包含字符串“Blocked SPAM”的行,并将其保存到名为 spamlog 的新文件中。然后它会打开 spamlog 并将每个空格字符 ' ' 替换为新行。
对于我的 awk 脚本,maillog 是从 shell 传递给脚本的文件。我尝试编写类似的代码:
/Blocked SPAM/ > spamlog`
-f spamlog {print $0} RS=' '
我真的不知道我在用我的 awk 脚本做什么,因为我很难为独立的 awk 脚本找到有用的资源。
【问题讨论】:
-
考虑编辑您上面的问题以包括 1. 示例输入(简化以涵盖基本要求),2. 基于该输入的所需输出,3. 您当前的输出。然后,您试图实现的大部分/所有模糊性都将被消除。祝你好运。
-
awk 并不适合这样的自动驾驶。我想你可能在这里遇到了 XY 问题。我认为您可能需要重新考虑您的方法,以获得一个可以执行您想要的操作的单一 awk 流程(请记住,您可以多次将同一个文件提供给 awk 并使用
NR==FNR匹配来操作第一个(但不是第二)通过它)。 -
{print $0}的常用 awk 习语是1。也就是说,您的第二个命令通常会写成awk 1 RS=' ' spamlog,尽管大多数人可能会写成awk '1' RS=' ' spamlog