gpt4 book ai didi

awk - 如何在 END 之前检测 awk 中的最后一行?

转载 作者:行者123 更新时间:2023-12-01 04:35:24 27 4
gpt4 key购买 nike

我正在尝试连接字符串值并打印它们,但是如果最后一个类型是字符串并且类型没有变化,那么连接将不会打印:

输入.txt:

String 1
String 2
Number 5
Number 2
String 3
String 3

错误:

awk '

BEGIN { tot=0; ant_t=""; }

{
t = $1; val=$2;
#if string, concatenate its value
if (t == "String") {
tot+=val;
nx=1;
} else {
nx=0;
}
#if type change, add tot to res
if (t != "String" && ant_t == "String") {
res=res tot;
tot=0;
}
ant_t=t;
#if string, go next
if (nx == 1) {
next;
}
res=res"\n"val;
}

END { print res; }' input.txt

当前输出:

3
5
2

预期输出:

3
5
2
6

我如何检测 awk 是否正在读取最后一行,所以如果类型没有变化,它会检查它是否是最后一行?

最佳答案

awk 逐行读取,因此它无法确定它是否正在读取最后一行。 END block 可用于在到达文件末尾后执行操作。

执行你期望的

awk '/String/{sum+=$2} /Number/{if(sum) print sum; sum=0; print $2} END{if(sum) print sum}'

将产生输出为

3
5
2
6

它有什么作用?

/String/ 选择匹配 String 的行,Number

sum+=$2 执行与 String 行的连接。当 Number 发生时,打印 sum 并重置为零

关于awk - 如何在 END 之前检测 awk 中的最后一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26377766/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com