如何使用 awk 在输入文件的最后一行之后插入新记录(行或行)?
How to insert a new record(row or line) after the last line of input file using awk?
学生的分数按以下格式给出 table滚动号 |考试成绩 |考试 2 中的分数 ... 即每行一条记录,每列由 | 分隔(管道)character.At 所有记录的末尾我想添加额外的行,其中包含有关最大、最小均值的信息...所以我的问题是如何在输入文件的末尾添加新记录?
示例:
这是一个示例输入
Piyush | 12345 | 5 | 5 | 4
James | 007 | 0 | 0 | 7
Knuth | 31415 | 100 | 100 | 100
输出为
Piyush | 12345 | 5 | 5 | 4 | 14
James | 007 | 0 | 0 | 7 | 7
Knuth | 31415 | 100 | 100 | 100 | 300
max | | 100 | 100 | 100 | 300
min | | 0 | 0 | 4 | 7
mean | | 35.00 | 35.00 | 37.00 | 107.00
sd | | 46.01 | 46.01 | 44.56 | 136.50
awk '
BEGIN { FS=OFS="|" }
{
sum = 0
for (i=3;i<=NF;i++) {
tot[i] += $i
sum += $i
max[i] = ( (i in max) && (max[i] > $i) ? max[i] : $i )
}
print [=10=], sum
max[i] = ( (i in max) && (max[i] > sum) ? max[i] : sum )
}
END {
printf "max" OFS ""
nf = NF+1
for (i=3; i<=nf; i++) {
printf "%s%s", max[i], (i<nf?OFS:ORS)
}
}'
重复 min 以及您需要计算的任何其他内容,并检查 printf 格式标志是否有您需要的任何间距(如果有)。
学生的分数按以下格式给出 table滚动号 |考试成绩 |考试 2 中的分数 ... 即每行一条记录,每列由 | 分隔(管道)character.At 所有记录的末尾我想添加额外的行,其中包含有关最大、最小均值的信息...所以我的问题是如何在输入文件的末尾添加新记录?
示例: 这是一个示例输入
Piyush | 12345 | 5 | 5 | 4
James | 007 | 0 | 0 | 7
Knuth | 31415 | 100 | 100 | 100
输出为
Piyush | 12345 | 5 | 5 | 4 | 14
James | 007 | 0 | 0 | 7 | 7
Knuth | 31415 | 100 | 100 | 100 | 300
max | | 100 | 100 | 100 | 300
min | | 0 | 0 | 4 | 7
mean | | 35.00 | 35.00 | 37.00 | 107.00
sd | | 46.01 | 46.01 | 44.56 | 136.50
awk '
BEGIN { FS=OFS="|" }
{
sum = 0
for (i=3;i<=NF;i++) {
tot[i] += $i
sum += $i
max[i] = ( (i in max) && (max[i] > $i) ? max[i] : $i )
}
print [=10=], sum
max[i] = ( (i in max) && (max[i] > sum) ? max[i] : sum )
}
END {
printf "max" OFS ""
nf = NF+1
for (i=3; i<=nf; i++) {
printf "%s%s", max[i], (i<nf?OFS:ORS)
}
}'
重复 min 以及您需要计算的任何其他内容,并检查 printf 格式标志是否有您需要的任何间距(如果有)。