gpt4 book ai didi

bash - awk 获取下一行

转载 作者:行者123 更新时间:2023-12-05 00:49:11 24 4
gpt4 key购买 nike

我正在尝试使用 awk 来格式化包含多行的文件。
文件内容:

ABC;0;1
ABC;0;0;10
ABC;0;2
EFG;0;1;15
HIJ;2;8;00
KLM;4;18;12
KLM;6;18;1200
KLM;10;18;14
KLM;1;18;15

想要的结果:

ABC;0;1;10;2
EFG;0;1;15
HIJ;2;8;00
KLM;4;18;12;1200;14;15

我正在使用下面的代码:

awk -F ";" '{
ligne= ligne $0
ma_var = $1
{getline
if($1 != ma_var){
ligne= ligne "\n" $0
}
else {
ligne= ligne";"NF
}
}
}
END {
print ligne
} ' ${FILE_IN} > ${FILE_OUT}

objectif是将下一行的第一列与当前行的第一列进行比较,如果匹配则将下一行的最后一列添加到当前行,并删除下一行,否则打印下一行行。

亲切的问候,

最佳答案

与生活一样,根据已经发生的事情(上一行)比将要发生的事情(下一行)更容易做出决定。将您的要求重新声明为 目标是将当前行的第一列与上一行的第一列进行比较,如果匹配则将当前行的最后一列添加到上一行,并删除当前行行,否则打印当前行。 实现它的代码变得相对简单:

$ cat tst.awk
BEGIN { FS=OFS=";" }
$1 == p1 { prev = prev OFS $NF; next }
{ if (NR>1) print prev; prev=$0; p1=$1 }
END { print prev }

$ awk -f tst.awk file
ABC;0;1;10;2
EFG;0;1;15
HIJ;2;8;00
KLM;4;18;12;1200;14;15

如果您想再次使用 getline,请确保您完全理解 http://awk.freeshell.org/AllAboutGetline 中讨论的所有内容。在做出决定之前。

关于bash - awk 获取下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44575730/

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