【问题标题】:Count number of special character combination of delimiters统计分隔符的特殊字符组合数
【发布时间】:2015-02-07 09:44:25
【问题描述】:

我有一个非常大的文件,其中的列由 |^ 特殊字符分隔。

需要注意的重要一点是我在AIX 服务器

数据示例如下:

name|^surname|^age|^city|^country
john|^doe|^15|^chicago|^usa
george|^reese|^14|^london|^england

在网上搜索后,我发现最好的东西如下

cat TEST_FILE.DAT | awk -F"\|\^" '{ print NF }'

但是这总是返回1,因为它无法将2 字符识别为1 字符串

以下命令返回正确数量的分隔符,但我想使用 |^ 的组合作为分隔符

cat TEST_FILE.DAT | awk -F"|" '{ print NF }'

【问题讨论】:

    标签: awk special-characters aix records


    【解决方案1】:

    使用\\ 代替\ 对我有用。不知道为什么。可能与如何在 bash、awk 和 awk 的正则表达式引擎中解释转义字符有关,但我无法给出很好的解释。

    $ cat test
    name   | ^surname| ^age | ^city    | ^country
    john   | ^doe    | ^15  | ^chicago | ^usa
    george | ^reese  | ^14  | ^london  | ^england
    
    $ cat test |awk -F'\\| \\^' '{for(i=1;i<=NF;i++){if($i)print $i}}'
    name   
    surname
    age 
    city    
    country
    john   
    doe    
    15  
    chicago 
    usa
    george 
    reese  
    14  
    london  
    england
    

    顺便说一句,对-F 使用单引号很重要。这条线也可以,但很丑:

    cat test |awk -F"\\\\| \\\\^" '{for(i=1;i<=NF;i++){if($i)print $i}}'
    

    【讨论】:

    • 我确认这对我有用 cat TEST_FILE.DAT | awk -F'\\|\\^' '{ print NF }' 非常感谢!
    【解决方案2】:

    试试这个:

    awk  -F'[|]\\^' '{print NF}' file
    

    awk  -F'[|][\\^]' '{print NF}' file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2012-10-01
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      相关资源
      最近更新 更多