【问题标题】:Change FS in AWK for multiple files在 AWK 中为多个文件更改 FS
【发布时间】:2014-06-27 00:55:31
【问题描述】:

我正在尝试在 AWK 脚本中读取多个文件,但是当我在文件之间进行更改时,字段分隔符 (FS) 也需要更改。此时我得到:

FILENAME=="A.txt"{
    FS=";"
    //DoSomething
}
FILENAME=="B.txt"{
    FS=" - "
    //DoSomething
}

但您可能知道,文件第一行的 FS 设置不正确。我该如何解决这个问题?

【问题讨论】:

    标签: unix awk fs


    【解决方案1】:

    您可以在命令行中指定字段分隔符:

    awk -f a.awk FS=";" A.txt FS=" - " B.txt
    

    这样,每个文件的字段分隔符都会改变。 来自http://www.delorie.com/gnu/docs/gawk/gawk_82.html

    任何 awk 变量都可以通过在其中包含变量赋值来设置 调用 awk 时命令行上的参数

    有了它,变量要么在 awk 运行开始时设置,要么 在输入文件之间。

    【讨论】:

      【解决方案2】:

      如果您单独列出文件,您可以按照@HakonHaegland 的建议通过在 arg 列表中的文件名之间设置 FS 来执行此操作。这是执行此操作的典型方法。

      或者,如果你不能这样做(例如,因为你需要使用* 或类似的文件列表),那么如果你使用 GNU awk,你可以使用 BEGINFILE,否则你可以这样做在更改 FS 以强制 awk 重新拆分记录之后,您已经通过向自身添加 $0 的分配。例如:

      $ cat file
      a-b-c
      d e f
      
      $ awk '{print NF, $1}' file
      1 a-b-c
      3 d
      
      $ awk '{FS="-"; $0=$0; print NF, $1}' file
      3 a
      1 d e f
      

      如果你打算这样做,最好在每个文件的开头只做一次(当FNR==1时)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-29
        • 2014-07-28
        • 2020-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多