从一个文件中获取数据并使用 awk 将其发送到另一个文件

Posted

技术标签:

【中文标题】从一个文件中获取数据并使用 awk 将其发送到另一个文件【英文标题】:Grabbing data from one file and sending it to another file using awk 【发布时间】:2021-04-23 11:43:30 【问题描述】:

我有一个 jupyter notebook 在一个包含一堆输出文件的目录中运行。 该目录有一堆.out 文件,我想对它们运行awk 以从中提取一些信息。

这是大部分工作的 bash 脚本:

for file in *.out
do awk '/SCF TOTAL ENERGY/ print $NF; exit' $file >> data.txt
done

这会从每个输出文件中获取 SCF 总能量,将它们打印出来,然后将它们扔到 data.txt

但是,这不是我想要从输出文件中获得的唯一信息。

假设我还有一条名为“有用”的信息。 我想获取与“USEFUL”相关的数字(也在 NF 位置),在 data.txt 中创建一个新列,并用 USEFUL 数据填充该列。

我知道我可以在data.txt 中使用

awk 'BEGINFS=OFS="  " 
print $0 OFS ' data.txt

但是,我不知道如何从一个文件中提取信息,并将其发送到data.txt,同时制作一个新列。

输入文件s如下所示: 先出

SCF TOTAL ENERGY ----> 1234
lorem
ipsum
text
here
more 
text
USEFUL ---> 4567 

秒出

CF TOTAL ENERGY ----> 4321
lorem
ipsum
text
here
more 
text
USEFUL ---> 7654 

第三个.out:

CF TOTAL ENERGY ----> 5566
lorem
ipsum
text
here
more 
text
USEFUL ---> 8877 

我希望我的data.txt 或最终数据文件看起来像:

1234  4567   
4321  7654
5566  8877

第一列为 SCF TOTAL ENERGY,第二列为 USEFUL。

目前,我只有第一列。我想创建一个代码,让我可以继续从输入文件中提取信息并继续添加列。

感谢您的任何建议!

【问题讨论】:

感谢您在问题中付出努力,能否请您在问题中发布输入和预期输出示例,以便更好地理解您的问题,谢谢。 好的,我会尽快制作文件。谢谢@RavinderSingh13 我添加了一些附加信息。希望它可以帮助@RavinderSingh13 感谢您添加示例。能否请您告诉我们-512.327909892086 29 行是如何输出的,对不起,但不清楚。 哦,因为我只有输入文件的示例,所以我在输出文件中发布了示例编号。我可以进行编辑。 【参考方案1】:

您能否尝试在 GNU awk 中使用所示示例进行跟踪、编写和测试。我们不需要使用for 循环来遍历所有.out 文件,您可以通过awk 程序本身读取所有.out 文件。

awk '/SCF TOTAL ENERGY/scfVal=$NF;next /USEFUL/print scfVal,$NF;scfVal=""' *.out

说明:为上述添加详细说明。

awk '                  ##Starting awk program from here.
/SCF TOTAL ENERGY/    ##Checking condition if line has SCF TOTAL ENERGY then do following.
  scfVal=$NF           ##Setting scfVal value to last field of current line here.
  next                 ##next will skip all further statements from here.

/USEFUL/              ##Checking if line contains USEFUL then do following.
  print scfVal,$NF     ##Printing scfVal and last field value here.
  scfVal=""            ##Nullify scfVal here.

' *.out                ##Passing all .out files to awk program from here.

注意:如果您只有一组SCF TOTAL ENERGYUSEFUL,请在scfVal="" 行之后添加nextfile 以在此处更快地处理它(它需要 GNU awk)。

【讨论】:

以上是关于从一个文件中获取数据并使用 awk 将其发送到另一个文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将当前位置从一项活动发送到另一项活动?

从一个文件中提取数据并保存到另一个文件

将 .bak 数据库文件从备份位置移动到另一台服务器

如何将从核心数据获取的数据发送到另一个 VC?

将 listView 数据从一个活动发送到另一个活动

将核心数据数据库从一台设备传递/导出到另一台设备