【发布时间】:2021-01-21 17:05:55
【问题描述】:
请,我需要从 400 个文件中提取值的帮助。到目前为止,我从来没有做过类似的事情,我不知道从哪里开始。由于我不是程序员,我不知道哪个软件程序会好用:R、SAS、Python、命令提示符、bash、awk。在使用命令提示符 bash 运行某些应用程序时,我在使用 SAS 和 R(主要是带有行和列的“常规”文件)进行数据操作/管理方面有一些经验。
- 我在云计算上运行 Structure(群体遗传学软件)。
- 输出为 400 个文件/运行。他们的名字是:job_01_01-output_f; job_01_02-output_f …… job_40_10-output_f
- 这些输出没有任何扩展名(如 .txt),但我通常使用 Textpad、Notepad++ 打开它们
- 在这 400 个文件/输出中的每一个中都有一行:Estimated Ln Prob of Data = -5570597.3
- 我想从所有这些文件/输出中提取数值 -5570597.3 并将其保存到类似 .csv、.txt 的列中(一个在另一个之下 - 类似文件的顺序相同)
- 此外,这一行并不总是在所有文件中的同一行,因为它取决于“参数”的数量。
- 所以我猜想类似“在“估计的 Ln 数据概率 =”之后取值是一种选择。
- 例如,一个文件/输出有大约 60000 行。这些文件的大小从 800kb 到 5mb。
- 例如,我将尝试上传文件/输出。
最好的问候
[LINK - 结构/文件输出示例][1]
https://www.dropbox.com/sh/idvoigkky7ldgb7/AAD5foVSKc5Ty6ijc08ge230a?dl=0
【问题讨论】:
-
如果我正确理解了您想要的内容,那么在 终端 更改目录 到 files 所在的位置然后使用以下复合命令:
awk -F'= ' '/Estimated Ln Prob of Data/{print $2}' * >> /path/to/file.csv -
如果你 edit 你的问题是提供一个 minimal reproducible example (没有图像和链接)简洁,可测试的文本样本输入(例如你提到的几个文本文件,每个有 4或 5 行文本)和预期输出(给定输入您想要生成的 CSV),那么会有更多人愿意/能够帮助您。见How to Ask。
-
谢谢@user3439894!这是工作!是否可以在 awk 代码中在值旁边包含文件名,以便我可以像两列一样导入此文件(空格或逗号可以是分隔符)。我忘记了这个,它会很有用。示例:job_01_01-output_f -5570597.3 job_40_01-output_f -2834943326.2
-
是的:
awk -F'= ' '/Estimated Ln Prob of Data/{print FILENAME, ",", $2}' * >> /path/to/file.csv