gpt4 book ai didi

awk - 如何计算空单元格之间的值

转载 作者:行者123 更新时间:2023-12-03 09:57:00 24 4
gpt4 key购买 nike

我面临着一个比我更大的问题。我有18个相对较大的文本文件(每个大约30k行),我需要计算第二列中空白单元格之间的值。这是我的文件的一个简单示例:

Metabolism
line_1 10.2
line_2 10.1
line_3 10.3
TCA_cycle
line_4 10.7
line_5 10.8
Pyruvate_metab
line_6 100.8
实际上,我有大约500条描述行(代谢,TCA_cycle等),行的范围介于零到几百之间。
我想为每个块计数值(块以描述开头,相应的行始终在下面),例如
Metabolism  30.6
line_1 10.2
line_2 10.1
line_3 10.3
TCA_cycle 21.5
line_4 10.7
line_5 10.8
Pyruvate_metab 100.8
line_6 100.8
要不就
30.3
21.5
100.8
如果将结果逐行打印到其他文件中,则不会有问题...或另一种替代方法。
有一件棘手的事情,它的描述中没有带数字的行。
Transport
line_1000 100.1
line_1001 100.2
Cell_signal
Motility
Processing
Translation
line_1002 500.1
line_1003 200.2
甚至对于那些行,并希望获得0值。
Transport     200.3
line_1000 100.1
line_1001 100.2
Cell_signal 0
Motility 0
Processing 0
Translation 700.3
line_1002 500.1
line_1003 200.2
文件的其余部分看起来相同并且一致-2列,制表符分隔符,第一列中的描述,第二列中的值,没有空格(仅下划线)。
实际上,我没有使用更复杂的编码的经验,所以我真的不知道如何在命令行中解决它。我已经尝试了一些Excel方式,但是这很痛苦而且没有成功。

最佳答案

使用tac和任何awk:

tac file | awk 'NF==2{sum+=$2; print; next} {print $1 "\t" sum; sum=0}' | tac

通过 kvantourEd Morton提出了两个改进。查看评论。
tac file | awk '($NF+0==$NF){sum+=$2; print; next} {print $1 "\t" sum+0; sum=0}' | tac

另请: 8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

关于awk - 如何计算空单元格之间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62864093/

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