从 awk 制作脚本

从 awk 制作脚本

我运行命令来重新格式化我的文本文件:

awk -F, '{if ($6<0) print $1$2,"   "$3$4,$5$6;
               else print $1$2,"   "$3$4$5,$6;}' filename.txt > seqXXX.txt

我怎样才能把它变成一个脚本,这样我就不用每次都输入命令了?我读了一些关于如何做到这一点的文章,但感到更加困惑

答案1

如何执行此操作在某种程度上取决于您想要将命令的哪一部分转换为脚本。我给你以下三种变体:

  1. 程序awk本身作为脚本。
  2. 该命令作为一个整体作为一个脚本。
  3. 该命令作为 shell 函数。

awk程序可以变成一个脚本,如下所示

#!/usr/bin/awk -f

BEGIN { FS = "," }

{
    if ($6 < 0)
        print $1$2,"   "$3$4,$5$6
    else
        print $1$2,"   "$3$4$5,$6
}

首先将字段分隔符设置为逗号,然后在输入的每一行上运行代码块。

这里使用的-line#!使得当您运行脚本文件时,它将像您awk -f script.awk在命令行上编写一样执行。第一行使用的路径应调整为指向awk系统上的正确解释器(请参阅 的输出command -v awk)。

使用 使该文件可执行后chmod +x script.awk,它将用作

$ ./script.awk filename.txt >seqXXX.txt

该命令可以放入 shell 脚本中,如下所示:

#!/bin/sh

awk -F, '{if ($6<0) print $1$2,"   "$3$4,$5$6;
               else print $1$2,"   "$3$4$5,$6;}' "$@"

这里我基本上只是将命令移植到 shell 脚本中。命令"$@"末尾的位将awk替换为您提供给脚本的所有命令行参数(可能只是单个输入文件的名称)。

制作此可执行文件后,您可以将其用作

$ ./script.sh filename.txt >seqXXX.txt

如果文件名是静止的并且永远不会改变,也将它们放入脚本中:

#!/bin/sh

awk -F, '{if ($6<0) print $1$2,"   "$3$4,$5$6;
               else print $1$2,"   "$3$4$5,$6;}' filename.txt >seqXXX.txt

然后在命令行上调用您的脚本,无需任何额外参数或重定向。


您可以将命令转换为 shell 函数。这几乎就像一个别名,但通常更灵活一些:

myreformat () {
    awk -F, '{if ($6<0) print $1$2,"   "$3$4,$5$6;
                   else print $1$2,"   "$3$4$5,$6;}' "$@"
}

这将放在您通常放置 shell 别名等的地方(~/.bashrc如果您使用bashshell,则可能在其中)。该功能将在下一个您启动的 shell 会话。

它的调用方式与上面的 shell 脚本变体几乎相同:

$ myreformat filename.txt >seqXXX.txt

相关内容