关于shell:在awk中设置输出字段分隔符

setting the output field separator in awk

我在awk脚本中尝试这个语句(在包含独立代码的文件中,所以不是内联的),脚本名:print-table.awk

1
2
3
BEGIN {FS ="\t";OFS ="," ; print"about to open the file"}
{print $0}
END {print"about to close stream" }

从壳里往这边跑

1
awk -f print-table.awk table

其中表是以制表符分隔的文件,我的目标是在外部函数中声明字段分隔符(fs)和输出字段分隔符(ofs),并从shell调用

1
awk -f file input

在命令行中不设置字段分隔符时使用-f" "如果没有stdout,它会变成一个sed语句,用逗号替换制表符,

有什么建议我怎么做吗?


你需要说服awk一些东西已经改变了,让它重新格式化$0使用您的OFS。尽管有一种更习惯的方法可以做到这一点,但下面的工作是可行的。

1
2
3
BEGIN {FS ="\t";OFS ="," ; print"about to open the file"}
{$1=$1}1
END {print"about to close stream" }


您需要更改awk中的一个字段:

1
awk 'BEGIN {FS="\t";OFS=","; print"about to open the file"} {$1=$1}1' file