将 awk 中的行逐行拉入文件

Pull rows in awk to file line-by-line

我正在尝试从变量与特定标识符匹配的 .csv 文件中提取行。这是一个示例数据集 (myfile.csv)

id,x,y,z
A01,1,5,7
A02,4,4,7
B01,1,6,6
A01,5,7,4
A01,4,8,4
C02,3,1,3
A01,1,2,3

我可以使用以下内容:

awk -F',' '{if( == "A01") print}' myfile.csv > outfile.csv

awk -F',' '{if( == "A01") print > "outfile.csv" }' myfile.csv

这将导致 outfile.csv:

A01,1,5,7
A01,5,7,4
A01,4,8,4
A01,1,2,3

但是,我正在处理一个非常大的数据集 (200Gb),当 运行 时,我必须等待 awk 完成才能输出到 outfile.csv

有没有办法让 awk 在遇到正确语句时打印到文件(即文件更新为 awk 进程)

尝试 运行ning 一次以下命令。所以我在这里做的是:尽管在每种情况下都进行了重定向,但在 awk 程序完成其 运行 后对输出文件进行一次输出重定向。我很确定与您当前的命令相比,这应该足够快,尽管这是公平的警告;还没有测试过。

awk -F',' '{if( == "A01") print}' myfile.csv > "outputfile.csv"

OR 无需显式提及 if 条件并打印,默认情况下 if 条件 if TRUE in awk 它打印该行作为默认操作,因此上面可以缩短为以下内容:

awk -F',' '( == "A01")' myfile.csv > "outputfile.csv"

像大多数工具一样,awk 正在缓冲它的输出以提高效率,所以只要告诉它在每次打印后刷新它的缓冲区即可:

awk -F',' ' == "A01"{ print; fflush() }' myfile.csv > outfile.csv