【问题标题】:awk: changing OFS without looping though variablesawk:在不循环变量的情况下更改 OFS
【发布时间】:2014-04-06 10:43:08
【问题描述】:

我正在开发一个 awk 单行代码,以将逗号替换为文件中的制表符(并用 \\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 ,但在那篇文章中似乎不清楚为什么它会起作用。

谢谢。

【问题讨论】:

    标签: awk


    【解决方案1】:

    Awk 将1 或除0 之外的任何数字评估为真陈述。因为,没有 action statements 部分的 true statements 等于 { print $0 }。它打印行。

    例如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 2017-10-25
      相关资源
      最近更新 更多