我正在使用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,但是在那篇文章中,似乎还不清楚为什么会这样。
感谢。
答案 0 :(得分:2)
Awk评估1
或0
以外的任何数字作为真实陈述。因为,没有操作语句部分的真实陈述等于{ print $0 }
。它打印线。
$ echo "hello" | awk '1'
hello
$ echo "hello" | awk '0'
$