Arrays 对文件中的行求和

Arrays 对文件中的行求和,arrays,shell,unix,awk,sed,Arrays,Shell,Unix,Awk,Sed,我想基于一个列字段添加行。是否可以通过awk命令或任何简单的方式执行 Date Hour Requests Success Error 10-Apr 11 1 1 0 10-Apr 13 1 1 0 10-Apr 14 1 1 0 10-Apr 18 1 1 0 10-Apr 9 1

我想基于一个列字段添加行。是否可以通过awk命令或任何简单的方式执行

Date    Hour  Requests   Success  Error
10-Apr  11      1           1       0
10-Apr  13      1           1       0
10-Apr  14      1           1       0
10-Apr  18      1           1       0
10-Apr  9       1           1       0
10-Apr  11      1           1       0
10-Apr  12      3           3       0
10-Apr  13      2           1       1
10-Apr  14      2           2       0
10-Apr  15      1           1       0
10-Apr  16      1           1       0
10-Apr  12      3           3       0
10-Apr  13      4           1       3
10-Apr  14      1           1       0
10-Apr  16      2           2       0
10-Apr  18      1           1       0
10-Apr  10      3           3       0
10-Apr  11      1           1       0
10-Apr  12      3           3       0
10-Apr  13      1           1       0
10-Apr  14      2           2       0
10-Apr  15      2           2       0
10-Apr  16      2           2       0
10-Apr  17      2           2       0
从上表中,我希望根据小时添加行(请求、成功、该小时的错误),o/p应如下所示

Date   Hour  Requests Success Error
10-Apr  9       1       1       0
10-Apr  10      3       3       0
10-Apr  11      3       3       0
10-Apr  12      9       9       0
10-Apr  13      8       4       4
10-Apr  14      6       6       0
10-Apr  15      3       3       0
10-Apr  16      5       5       0
10-Apr  17      2       2       0
10-Apr  18      2       2       0

将GNU awk用于真正的多维数组,并在中排序

$ cat tst.awk
NR==1 { print; next }
!seen[$1]++ { dates[++numDates] = $1 }
{ for (i=3;i<=NF;i++) sum[$1][$2][i] += $i }
END {
    PROCINFO["sorted_in"] = "@ind_num_asc"
    for (dateNr=1; dateNr<=numDates; dateNr++) {
        date = dates[dateNr]
        for (hr in sum[date]) {
            printf "%s %s ", date, hr
            for (i=3;i<=NF;i++) {
                printf "%s%s", sum[date][hr][i], (i<NF?OFS:ORS)
            }
        }
    }
}
$ awk -f tst.awk file | column -t
Date    Hour  Requests  Success  Error
10-Apr  9     1         1        0
10-Apr  10    3         3        0
10-Apr  11    3         3        0
10-Apr  12    9         9        0
10-Apr  13    8         4        4
10-Apr  14    6         6        0
10-Apr  15    3         3        0
10-Apr  16    5         5        0
10-Apr  17    2         2        0
10-Apr  18    2         2        0
$cat tst.awk
NR==1{打印;下一个}
!已看到[$1]+{dates[++numDates]=$1}

{对于(i=3;i使用GNU awk处理真正的多维数组,并在
中排序

$ cat tst.awk
NR==1 { print; next }
!seen[$1]++ { dates[++numDates] = $1 }
{ for (i=3;i<=NF;i++) sum[$1][$2][i] += $i }
END {
    PROCINFO["sorted_in"] = "@ind_num_asc"
    for (dateNr=1; dateNr<=numDates; dateNr++) {
        date = dates[dateNr]
        for (hr in sum[date]) {
            printf "%s %s ", date, hr
            for (i=3;i<=NF;i++) {
                printf "%s%s", sum[date][hr][i], (i<NF?OFS:ORS)
            }
        }
    }
}
$ awk -f tst.awk file | column -t
Date    Hour  Requests  Success  Error
10-Apr  9     1         1        0
10-Apr  10    3         3        0
10-Apr  11    3         3        0
10-Apr  12    9         9        0
10-Apr  13    8         4        4
10-Apr  14    6         6        0
10-Apr  15    3         3        0
10-Apr  16    5         5        0
10-Apr  17    2         2        0
10-Apr  18    2         2        0
$cat tst.awk
NR==1{打印;下一个}
!已看到[$1]+{dates[++numDates]=$1}

{对于(i=3;i使用GNU awk处理真正的多维数组,并在
中排序

$ cat tst.awk
NR==1 { print; next }
!seen[$1]++ { dates[++numDates] = $1 }
{ for (i=3;i<=NF;i++) sum[$1][$2][i] += $i }
END {
    PROCINFO["sorted_in"] = "@ind_num_asc"
    for (dateNr=1; dateNr<=numDates; dateNr++) {
        date = dates[dateNr]
        for (hr in sum[date]) {
            printf "%s %s ", date, hr
            for (i=3;i<=NF;i++) {
                printf "%s%s", sum[date][hr][i], (i<NF?OFS:ORS)
            }
        }
    }
}
$ awk -f tst.awk file | column -t
Date    Hour  Requests  Success  Error
10-Apr  9     1         1        0
10-Apr  10    3         3        0
10-Apr  11    3         3        0
10-Apr  12    9         9        0
10-Apr  13    8         4        4
10-Apr  14    6         6        0
10-Apr  15    3         3        0
10-Apr  16    5         5        0
10-Apr  17    2         2        0
10-Apr  18    2         2        0
$cat tst.awk
NR==1{打印;下一个}
!已看到[$1]+{dates[++numDates]=$1}

{对于(i=3;i使用GNU awk处理真正的多维数组,并在
中排序

$ cat tst.awk
NR==1 { print; next }
!seen[$1]++ { dates[++numDates] = $1 }
{ for (i=3;i<=NF;i++) sum[$1][$2][i] += $i }
END {
    PROCINFO["sorted_in"] = "@ind_num_asc"
    for (dateNr=1; dateNr<=numDates; dateNr++) {
        date = dates[dateNr]
        for (hr in sum[date]) {
            printf "%s %s ", date, hr
            for (i=3;i<=NF;i++) {
                printf "%s%s", sum[date][hr][i], (i<NF?OFS:ORS)
            }
        }
    }
}
$ awk -f tst.awk file | column -t
Date    Hour  Requests  Success  Error
10-Apr  9     1         1        0
10-Apr  10    3         3        0
10-Apr  11    3         3        0
10-Apr  12    9         9        0
10-Apr  13    8         4        4
10-Apr  14    6         6        0
10-Apr  15    3         3        0
10-Apr  16    5         5        0
10-Apr  17    2         2        0
10-Apr  18    2         2        0
$cat tst.awk
NR==1{打印;下一个}
!已看到[$1]+{dates[++numDates]=$1}

{for(i=3;如果您是指
sum fields
not
add rows
。FYI您是指
sum fields
not
add rows
。FYI您是指
not
add rows
。FYI您是指
sum fields
not
add rows