【问题标题】:Checking csv file max column length for multiple files检查多个文件的 csv 文件最大列长度
【发布时间】:2015-08-20 11:26:22
【问题描述】:

我有一个 shell 脚本,它可以找到每列(不包括标题)的最大字符长度,然后将其打印出来 - 当我使用这个命令传入单个时,所有这些都可以正常工作:

awk -F',' -f /cygdrive/c/temp/test2.awk /cygdrive/c/temp/files/testFile1.csv

但是,files 目录包含更多的文件,例如 testFile2.csv 等。我为每个文件运行了上面的命令,发现第一列不超过 7 个字符的长度(不包括标题),但下面的命令返回值 9(这意味着它在计算中包含了标题 - 为什么会这样做那个?):

awk -F',' -f /cygdrive/c/temp/test2.awk /cygdrive/c/temp/files/testFile*.csv

这是脚本:

#!/bin/awk -f
NR==1{
    for(n = 1; n <= NF; n++) {
       colname[n]=$n
    }
}
NR>1{
    for(n = 1; n <= NF; n++) {
        if (length($n)>maxlen[n])
            maxlen[n]=length($n)
    }
}
END {
        for (i in maxlen) {
                print colname[i], ":",maxlen[i];
        }
        print "----- Total columns: " i " -----";
}

【问题讨论】:

    标签: bash csv unix


    【解决方案1】:

    我找到了解决方案,现在它就像一个魅力,忽略每个文件中的所有标题,同时找到每个文件中每列的最大字符长度。

    修改后的代码:

    #!/bin/awk -f
    NR==1{
        for(n = 1; n <= NF; n++) {
           colname[n]=$n
        }
    }
    FNR==1{next}
    NR>1{
        for(n = 1; n <= NF; n++) {
            if (length($n)>maxlen[n])
                maxlen[n]=length($n)
        }
    }
    END {
            for (i in maxlen) {
                    print colname[i], ":",maxlen[i];
            }
            print "----- Total columns: " i " -----";
    }
    

    【讨论】:

    • 我让它在 Windows 上工作(安装了 Gow),但需要在 awk 命令中将 ' 符号替换为 " 符号 :)
    猜你喜欢
    • 2018-04-11
    • 2016-05-25
    • 1970-01-01
    • 2013-03-28
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    相关资源
    最近更新 更多