转义序列作为参数传递给 gawk 未解释

cdo*_*orn 5 awk gawk

我希望能够在命令行上传递一个参数来gawk评估转义序列。

问题:

$ gawk 'BEGIN { print ARGV[1]; }' '\t'
\t
Run Code Online (Sandbox Code Playgroud)

相反,我想获得一个实际的制表符。

gawk 文档

对于字符串常量和正则表达式常量,总是首先处理前面列表中的转义序列。这发生得非常早,只要 awk 读取您的程序。

如何解释命令行参数中的字符转义?

最终目标是 myscript.awk --sep '\t',其中分隔符是格式字符串,因此传递文字选项卡不是一种选择。我也熟悉在 bash 中执行此操作的简单方法,但我对在 [g]awk 中执行此操作的方法感兴趣。

cdo*_*orn 0

解决方案是使用getline.

文件内:

BEGIN { 
    sep = ARGV[1]
    gsub(/'/, "'\\''", sep);
    gsub(/%/, "%%", sep);
    "printf -- '" sep "'" | getline sep; 
    printf sep;
}
Run Code Online (Sandbox Code Playgroud)