在一个文件中执行多个 awk 命令

在一个文件中执行多个 awk 命令

我正在尝试从文件中提取行并将输出保存到新文件。

我一直在使用以下代码:

cat datafile | awk -f pullhh.txt > fuel

文件pullhh.txt包含代码/FUELHH/

我想提取包含该单词的行FUELHH并将它们保存到文件中,然后还提取包含的行FUELINST并将它们保存到单独的文件中。

有没有办法在pullhh.txt文件中同时使用这两个命令来实现这一点?

答案1

编辑:打印到单独的文件:

/FUELHH/   {print > "fuelhh.txt"}
/FUELINST/ {print > "fuelinst.txt"}

由于pullhh.txt它实际上是一个 awk 脚本,因此txt扩展名具有误导性。使用类似以下内容extract_lines.awk

awk -f extract_lines.awk datafile

答案2

因为您想将输出转移到 2 个不同的文件,所以我建议执行以下操作(通过-fawk 选项执行)。

BEGIN {
    while (getline line < "datafile" > 0) {
        if (match(line, "FUELHH"))   print line > "file1"
        if (match(line, "FUELINST")) print line > "file2"
    }
}

更短的解决方案:

{
    if (match($0, "FUELHH"))   print > "file1"
    if (match($0, "FUELINST")) print > "file2"
}

答案3

您所需要的只是一个行程序,不需要脚本文件:

awk '/FUELHH/{print > "fuelhh.txt"}/FUELINST/{print}' datafile > fuelinst.txt

相关内容