awk split将整个字符串添加到数组位置1(原因未知)

时间:2018-05-02 19:34:10

标签: linux awk

所以我有一个.txt文件,如下所示:

mona 70 77 85 77
john 85 92 78 80
andreja 89 90 85 94
jasper 84 64 81 66
george 54 77 82 73
ellis 90 93 89 88

我创建了一个grades.awk脚本,其中包含以下代码:

{
    FS=" "
    names=$1
    vi1=$2
    vi2=$3
    vi3=$4
    rv=$5
    #printf("%s ",names);

    split(names,nameArray," ");
    printf("%s\t",nameArray[1]); //prints the whole array of names for some reason, instead of just the name at position 1 in array ("john")
}

所以我的问题是,如何正确拆分?难道我做错了什么?

如何正确地逐字逐句阅读。我需要将每列添加到自己的数组中。我已经在很长一段时间内一直在寻找答案,无法解决我的问题。

2 个答案:

答案 0 :(得分:1)

这是一个计算每位学生平均成绩的模板

$ awk '{sum=0; for(i=2;i<=NF;i++) sum+=$i; 
        printf "%s\t%5.2f\n", $1, sum/(NF-1)}' file

mona    77.25
john    83.75
andreja 89.50
jasper  73.75
george  71.50
ellis   90.00

答案 1 :(得分:-1)

printf("%s\t",nameArray[1])

正在按照您的意愿完成,但您不能在调用之间打印任何换行符,因此每个输入行都会调用一次并一次输出一个单词,但由于您没有这样做。输出单词之间的任何换行符只需输出1行。将其更改为:

printf("%s\n",nameArray[1])

您的代码当然还有其他一些问题(例如,您在错误的位置设置FS并且不必要地,名称只包含1个单词,因此将其拆分为数组并不合理,等)但我认为这是你特别询问的。

如果这不是您想要的全部内容,请编辑您的问题以澄清您尝试做的事情,并添加简洁,可测试的样本输入和预期输出。