繁体   English   中英

有没有一种简单的方法可以使用小脚本自动读取文本文件并使用 bash 脚本和 awk 或其他 unix 命令进行绘图?

[英]Is there an easy way to use a small script to automate reading of a text file and plotting using bash script with awk or other unix commands?

我不熟悉使用 awk 和处理文本文件。 我有 model output 文件,包含 >600,000 行。 我想在 bash 脚本中使用该脚本自动绘制该文件中的 x,y 点。 我用“t”表示时间,用“T”表示温度,分别是x和y。 每行或每一行都有不同数量的 tT 点

每行由以下以逗号分隔的内容组成:

-loglikelihood, -posterior, #Npairs-1, t1, T1, t2, T2...

有没有办法使用脚本开始读取“CHAIN”处的文件并读取直到文件中达到“CHAIN END”? 每行中的每个 t,T 对都需要单独绘制为 x,y 对,因此所有 t1、t2、t3、t4、t5 等都是 X 值和 T1、T2、T3、T4、T5、等等,都是 Y 值。

例如,如果一行或单行如下所示:-400, -430, 3, 500, 50, 350, 100, 200, 20, 0, 5

---- 那么500、350、100、200、0都是X(时间)点,rest是Y(温度)点(即50、100、20、5)。 因此 500、350 是第一个 x,y 对,依此类推...

奖励:我想为每行和相关的点集保留 -400 的对数似然值,然后将整个 600,000 tT“路径”组从 0-1 标准化,以便使用色带进行绘图。

实际数据文件 *** https://drive.google.com/file/d/1DLabBKWbhaX-w4Kp5jxdiuL5afDFZmuX/view?usp=sharing** *

更新:我最初认为转置到列会起作用,但这可能很困难且效率低下,因为不仅行会被转置到列,而且时间-温度点对需要在每读取一行时分成两列in 和所有并排放置以正确读取

部分答案,也许它会为最终解决方案提供一些提示......

您可以通过简单的更改来创建柱状格式

$ awk 'NR>=45&& NR<=600044 {for(i=5;i<=19;i+=2) print $i,$(i+1)}' input.txt > output.txt

这将降低似然值,因为它没有出现在 output 中。 下一个挑战是将一对列拆分为多列格式。 如果我理解正确的话,最终的 output 中将有 600,000 x 2 = 1.2M 列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM