可以设置全局 AWK 分隔符
Is possible to set global AWK separator
是否可以设置 awk 的全局分隔符,例如,在 .conf 文件或环境变量中?
我正在处理很多使用自定义分隔符的文件,每次都手动设置 FS 和 OFS 感觉不对。
谢谢。
不,您最好是导出一个 shell 变量,然后从中设置 FS,例如:
$ cat tst.awk
BEGIN { FS=ENVIRON["AWK_FS"] }
{ print NF }
$ export AWK_FS=","
$ echo 'a,b,c' | awk -f tst.awk
3
或包含一个设置 FS 的文件:
$ cat setFS.awk
BEGIN{ FS="," }
$ cat tst.awk
@include "setFS.awk"
{ print NF }
$ echo 'a,b,c' | awk -f tst.awk
3
“@include”结构是 gawk-specific,参见 https://www.gnu.org/software/gawk/manual/gawk.html#Include-Files。您仍然必须将相同的代码放入每个脚本以包含该文件,但至少实际的 FS 设置(以及 OFS 和您通常做的任何其他事情)代码只会在该包含的文件中指定一次。
是否可以设置 awk 的全局分隔符,例如,在 .conf 文件或环境变量中?
我正在处理很多使用自定义分隔符的文件,每次都手动设置 FS 和 OFS 感觉不对。
谢谢。
不,您最好是导出一个 shell 变量,然后从中设置 FS,例如:
$ cat tst.awk
BEGIN { FS=ENVIRON["AWK_FS"] }
{ print NF }
$ export AWK_FS=","
$ echo 'a,b,c' | awk -f tst.awk
3
或包含一个设置 FS 的文件:
$ cat setFS.awk
BEGIN{ FS="," }
$ cat tst.awk
@include "setFS.awk"
{ print NF }
$ echo 'a,b,c' | awk -f tst.awk
3
“@include”结构是 gawk-specific,参见 https://www.gnu.org/software/gawk/manual/gawk.html#Include-Files。您仍然必须将相同的代码放入每个脚本以包含该文件,但至少实际的 FS 设置(以及 OFS 和您通常做的任何其他事情)代码只会在该包含的文件中指定一次。