awk:在不循环变量的情况下改变OFS

时间:2014-04-06 01:58:58

标签: awk

我正在使用awk one-liner将逗号替换为文件中的选项卡(并交换\\N以获取缺失值以准备MySQL select into)。

以下链接http://www.unix.com/unix-for-dummies-questions-and-answers/211941-awk-output-field-separator.html(位于底部)建议采用以下方法来避免循环变量:

 echo a b c d | awk '{gsub(OFS,";")}1'

 head -n1 flatfile.tab | awk -F $'\t' '{for(j=1;j<=NF;j++){gsub(" +","\\N",$j)}gsub(OFS,",")}1'

显然,尾随1(可以是数字,字符)会触发整个记录的打印。你能解释一下为什么这有效吗?

SO也有Print all Fields with AWK separated by OFS,但是在那篇文章中,似乎还不清楚为什么会这样。

感谢。

1 个答案:

答案 0 :(得分:2)

Awk评估10以外的任何数字作为真实陈述。因为,没有操作语句部分的真实陈述等于{ print $0 }。它打印线。

例如:

$ echo "hello" | awk '1'
hello
$ echo "hello" | awk '0'
$