awk 分隔符首选项

awk 分隔符首选项

我在 cygwin 中编写临时 awk 命令来处理制表符分隔的文件。几乎每个命令都以:

BEGIN {FS="\t";OFS="\t";ORS="\r\n";}  

如何将这些分隔符设为默认值以避免每次都输入它们?

答案1

也许最简单的方法是使用 shell 别名(将其添加到~/.bashrcshell 或等效的 shell 中):

alias awktab="awk -v FS='\t' -v OFS='\t' -v ORS='\t'"

答案2

您还可以为其添加快捷方式。例如,要将Ctrl+G插入awk -v FS='\t' -v OFS='\t' -v ORS='\t'到您的终端中,请将此行添加到您的~/.inputrc

Control-G: "awk -v FS='\t' -v OFS='\t' -v ORS='\t'"

然后,打开一个新终端,输入Ctrl+G并立即!

答案3

由于 POSIX 定义了什么特殊变量默认值是,简单的选项是在运行时覆盖它们(不简单的选项是更改源)。

在这种情况下,gawk您可以将通用代码(通常在BEGIN {}块内)放入库文件中。如果将它们放置在默认库路径(可能是/usr/share/awk//usr/local/share/awk)中,或者环境变量AWKPATH指向的位置,则不需要使用完整路径:

gawk -f tabfile.awk [...]

与其他 awks 不同,gawk它允许多个选项,并允许您在命令行上-f混合使用两者和程序源。-f

最新版本支持额外的-i包含文件选项(自 gawk-4.1.0 起)和@include指令(自 4.0.x AFAICT 起)。这是一个稍微更健壮和友好的版本-f

gawk '@include "tabfile"; /foo/ { ... }'

上面将包含tabfile.awk来自AWKPATH或默认的库路径。@include已经支持很长时间了,但是通过igawkshell 脚本包装器gawk,它现在是 gawk 的一个功能。

这与其他两个很好的答案兼容,例如:

alias awktab="gawk -i tabfile"

-v使用此库文件方法和在命令行上使用之间有一个细微的区别:命令行选项在任何 awk 代码运行之前生效,因此它们是在库代码运行时设置的。如果库代码使用此类变量(例如读取数据文件),这可能很重要。

相关内容