【问题标题】:Overwrite input file using awk使用 awk 覆盖输入文件
【发布时间】:2016-06-14 01:45:33
【问题描述】:

我有以下代码行:

awk -F, '{printf "%09d,%d\n" ,$1,$2}' $newDir/$processNew

它会做我想做的事,但不是覆盖当前文件,而是打印出屏幕。

我需要改变什么来覆盖当前的输入文件 $processNew ?

谢谢。

【问题讨论】:

    标签: linux unix command-line


    【解决方案1】:

    如果要覆盖源文件,需要使用临时文件file:

    awk -F, '{printf "%09d,%d\n" ,$1,$2}' $newDir/$processNew > tmp && mv tmp $newDir/$processNew
    

    【讨论】:

      【解决方案2】:

      使用 GNU awk,您可以做到

      gawk -i inplace -options 'script' file ...
      

      gawk -i inplace -v INPLACE_SUFFIX=.bak -options 'script' file ...
      

      参考:https://www.gnu.org/software/gawk/manual/html_node/Extension-Sample-Inplace.html

      【讨论】:

      • 我很好奇;如何使这些扩展工作?它显然不是 posix awk 的一部分。我在 ubuntu 14.04 上的 awk (GNU Awk 4.0.1) 对 -i 开关一无所知。
      • 不知道是什么版本添加的。可能是4.3。所以升级以使它们工作
      • 4.1.3 ... ?无论如何,从 PPA 获得 4.1.1,就可以了。让我感到困惑的是 -i ...我没想到它会加载那个扩展,而是类似于 sed 中的那个。 :)
      猜你喜欢
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      相关资源
      最近更新 更多