【问题标题】:How to process and save data in chunks using awk?如何使用 awk 以块的形式处理和保存数据?
【发布时间】:2021-01-06 03:18:03
【问题描述】:

假设我正在打开一个大型(数 GB)文件,我无法一次读取整个文件。

如果是 csv 文件,我们会使用:

for chunk in pd.read_csv('path/filename', chunksize=10**7):
    # save chunk to disk

或者我们可以对 pandas 做类似的事情:

import pandas as pd
with open(fn) as file:
    for line in file:
        # save line to disk, e.g. df=pd.concat([df, line_data]), then save the df

如何使用 awk 脚本“分块”数据? awk 会将文本解析/处理为您想要的格式,但我不知道如何使用 awk 进行“分块”。可以编写一个脚本script1.awk 然后处理您的数据,但这会同时处理整个文件。

相关问题,有更具体的例子:How to preprocess and load a "big data" tsv file into a python dataframe?

【问题讨论】:

  • 您是在问awk 是否可以根据条件将一个大文件拆分为多个文件?如果是这样,是的是可能的。如果您提供更多信息(例如输入文件以及您希望如何处理它)会更有帮助
  • 默认情况下不会逐行读取(可以使用 RS 更改以指定不同的记录分隔符) - 因此文件大小没有实际意义?
  • 问题是什么? awk 还是 python/熊猫?如果您已经在使用 python,我看不出使用 awk 的意义。
  • @Inian 我明白,但我不想在这里重复这个有据可查的问题:stackoverflow.com/questions/39398986/…
  • @Sundeep 那么如何将每一行逐行保存到(比如说)熊猫数据框中?

标签: bash awk dataframe


【解决方案1】:

awk 按设计一次读取一条记录(chunk)。默认情况下,记录是数据行,但您可以使用RS (记录分隔符) 变量指定记录。在读取下一条之前,每个代码块都会有条件地在当前记录上执行:

$ awk '/pattern/{print "MATCHED", $0 > "output"}' file

上述脚本将从输入文件中一次读取一行,如果该行与pattern 匹配,它将在读取下一行之前将该行保存在文件输出中以MATCHED 开头。

【讨论】:

猜你喜欢
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多