将 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
我正在尝试从变量与特定标识符匹配的 .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