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