【问题标题】:Using a field separator of the two-character string "\n" in awk在 awk 中使用两个字符串“\n”的字段分隔符
【发布时间】:2015-07-27 23:56:12
【问题描述】:

我的输入文件中有一个换行符的纯文本表示形式,用于分隔字段:

First line\nSecond line\nThird line

我希望以下内容将 \n 替换为换行符:

$ awk 'BEGIN { FS = "\\n"; OFS = "\n" } { print $1 }' test.txt                                                                                                                                  
First line\nSecond line\nThird line

但它没有(gawk 4.0.1 / OpenBSD nawk 20110810)。

我可以在\ 上分开:

$ awk 'BEGIN { FS = "\\"; OFS = "\n" } { print $1, $2 }' test.txt 
First line
nSecond line

我也可以在 gawk 中使用字符类:

$ awk 'BEGIN { FS = "[[:punct:]]n"; OFS = "\n" } { $1 = $1; print $0 }' test.txt 
First line
Second line
Third line

但我觉得我应该能够指定确切的分隔符。

【问题讨论】:

    标签: awk gawk


    【解决方案1】:

    字段分隔符是一种正则表达式,当使用动态正则表达式时,您需要对所有内容进行双重转义:

    $ awk 'BEGIN { FS = "\\\\n"; OFS = "\n" } { print $1 }' file
    First line
    

    详情请参见手册页。

    【讨论】:

      【解决方案2】:

      这里sed 可能是完成这项任务的更好工具

      sed 's/\\n/\n/g'
      

      【讨论】:

      • 更好的工具:对于我帖子中的最小示例,是的。对于我需要的原始程序,需要使用 awk,它只是有一个奇怪的记录分隔符。
      • 你总是可以分而治之。 ... | sed 's/\\n/\n/g' | awk '...
      猜你喜欢
      • 2017-11-20
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      相关资源
      最近更新 更多