Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用shell脚本查找CSV文件中列的最小和最大长度_Shell_Csv_Awk_Sh_Gawk - Fatal编程技术网

使用shell脚本查找CSV文件中列的最小和最大长度

使用shell脚本查找CSV文件中列的最小和最大长度,shell,csv,awk,sh,gawk,Shell,Csv,Awk,Sh,Gawk,我有几个包含多列的CSV文件,我想获得同一CSV文件中每个列的最大长度、最小长度和差异(max-min)。例如: 文件: 预期产出: abc 1234 4 bcd 23644 534 c 3232 6 Max Length 3 5 3 Min Length 1 4 1 Diff 2 1 2 awk -F, ' { for (i=1;i<=NF;i++)l[i]=((x=length($i))>l[i]?x:l[i])} END {for(i=1;i

我有几个包含多列的CSV文件,我想获得同一CSV文件中每个列的最大长度、最小长度和差异(max-min)。例如:

文件:

预期产出:

    abc 1234 4
    bcd 23644 534
    c 3232 6

Max Length 3 5 3
Min Length 1 4 1
Diff 2 1 2
awk -F, '
  { for (i=1;i<=NF;i++)l[i]=((x=length($i))>l[i]?x:l[i])}
  END {for(i=1;i<=NF;i++) print "Column"i":",l[i]} '
以下用于计算最大列长度的脚本正在生成预期输出:

    abc 1234 4
    bcd 23644 534
    c 3232 6

Max Length 3 5 3
Min Length 1 4 1
Diff 2 1 2
awk -F, '
  { for (i=1;i<=NF;i++)l[i]=((x=length($i))>l[i]?x:l[i])}
  END {for(i=1;i<=NF;i++) print "Column"i":",l[i]} '
awk-F,'
{for(i=1;il[i]?x:l[i])}

END{for(i=1;i您只需要根据文件的第一行设置最小和最大数组的起始值:

awk '
    NR==1 {for (i=1; i<=NF; i++) maxlen[i] = minlen[i] = length($i)}
    {
        for (i=1; i<=NF; i++) {
            len = length($i)
            if (len > maxlen[i]) maxlen[i] = len
            if (len < minlen[i]) minlen[i] = len
        }
    }
    END {
        printf "Max Length"
        for (i=1; i<=NF; i++) printf " %d", maxlen[i]
        print ""
        printf "Min Length"
        for (i=1; i<=NF; i++) printf " %d", minlen[i]
        print ""
        printf "Diff"
        for (i=1; i<=NF; i++) printf " %d", maxlen[i]-minlen[i]
        print ""
    }
' file
awk'

NR==1{for(i=1;ii)在第二个脚本中,使用BEGIN表明您需要了解BEGIN的功能。此外,您谈到CSV文件,awk脚本使用逗号作为分隔符,但示例中没有逗号。因为“CSV”是一个高度模糊的名称,如果您澄清您的意思,可能会有所帮助。特别是,是否有任何字段具有嵌入的字段分隔符?如果CSV文件中的字段中的值看起来像
“abc”
(即,带有外引号),则该值应计为长度3还是5?那么
的长度如何“
?切勿将
l
(字母
el
)用作变量名,因为它看起来太像
1
(数字
1
),在某些字体中无法区分,因此会混淆脚本。例如,
maxl[i]=l
看起来像是在设置
maxl[i]
1
。可以使用
cur
匹配
max
min