首页 > 解决方案 > 如何在ubuntu中检查txt文件的分隔符

问题描述

我有 .txt 文件,我想检查它们的分隔符。文件可能有分隔符制表符、竖线 (|) 和逗号

制表符分隔文件

ID  Name    Email
1   Test    a@test.com
2   testone b@test.com

逗号分隔

ID,Name,Email
1,Test,a@test.com
2,testone,b@test.com

对于上述示例数据,我想获得分隔符。所以对于第一个示例分隔符是制表符,对于第二个分隔符是逗号(,)

标签: shellubuntuawksed

解决方案


这实际上是一个非常好的问题,我也想看看其他人的解决方案。这是在自动化处理 sh***y 数据时需要解决的问题:

awk '
FNR==1 {                          # process the header record
    line=$0                       # duplicate to leave $0 usable
    
    gsub(/[^,|\t]/,"",line)       # remove non-candidates

    split(line,a,"")              # split leftovers

    delete b                      # ... since FNR...
    max=prev=0                    # reset
        
    for(i in a)                   # flip a and count hits
        b[a[i]]++
        
    for(i in b)                   # find max amount of hits
        if(b[i]>=b[max]) {        
            prev=max
            max=i
        }
    if(b[prev]==b[max]) {         # if count collision
        print "Multiple candidates for delimiter. Exiting."
        exit 1
    }
                                  # below: output 
    printf "Delimiter: %s\n",(max=="\t"?"\\t":(max==" "?"[space]":max))

    exit
}' file

输出例如:

Delimiter: \t

推荐阅读