【问题标题】:Extract Column(s) from text file having Multi Character Delimiter i.e. "%$%"从具有多字符分隔符的文本文件中提取列,即“%$%”
【发布时间】:2018-05-22 08:54:43
【问题描述】:

对于论坛上给出的问题,我尝试了不同的解决方案,但不适用于指定的分隔符%$%,我需要从包含 200 多列的文件中提取一个特定的列。

我尝试了以下方法:

awk -F"%$%" '{print $1}' sample.txt > outfile.txt
awk 'gsub("%$%",":")' sample.txt > outfile.txt

【问题讨论】:

    标签: linux file awk command


    【解决方案1】:

    符号$是正则表达式中的特殊字符,所以需要用\转义,这也是字符串文字的特殊字符,所以需要再次转义。

    所以,我们终于有了:

    $ cat sample 
    ghkjlj;lk%$%23e;k32poek%$%eqdje2oijd%$%xrgtdy5h
    
    $ awk -F'%\\$%' '{print $1}' sample 
    ghkjlj;lk
    

    【讨论】:

      【解决方案2】:

      无论-F (FS) 还是gsub(),它都需要一个正则表达式,您需要使用字符类或转义具有特殊含义的字符,例如您的示例中的$

      kent$ awk -F'%[$]%' '{print $1}' <<<"foo%$%bar%$%blah"
      foo
      

      如果您只想更改分隔符,可以使用gsub 或使用OFS

      kent$ awk -F'%[$]%' -v OFS=":" '$1=$1' <<<"foo%$%bar%$%blah"
      foo:bar:blah  
      kent$ awk 'gsub(/%[$]%/,":")+1' <<<"foo%$%bar%$%blah"  
      foo:bar:blah 
      

      【讨论】:

        猜你喜欢
        • 2017-06-25
        • 1970-01-01
        • 1970-01-01
        • 2021-04-14
        • 1970-01-01
        • 1970-01-01
        • 2013-05-29
        • 2015-01-29
        • 2019-10-01
        相关资源
        最近更新 更多