检查csv文件多个文件的最大列长度

时间:2015-08-20 11:26:22

标签: bash csv unix

我有一个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 " -----";
}

1 个答案:

答案 0 :(得分: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 " -----";
}