awk如何设置多个输出的格式输出文件名

awk如何设置多个输出的格式输出文件名

我有一个文件(file.csv),如下所示:

abc 123
abc 001
abc 014
bos 011
bos 034
bos 079
bos 004
...

PS:file.csv的第1列总共有27297个唯一单词,file.csv总共有789234行

我想根据第一列将其拆分为多个文件。我使用 awk 来处理它:

awk '{x=++i}{print $2 > "HG"x".txt"}' file.csv

但是,输出的名称是HG1.txt, HG2.txt,..., HG27297.txt。我想要的是输出的文件名应该被格式化,它们应该看起来像HG000001.txt, HG000002.txt,..., HG027297.txt

答案1

{x=++i}将产生 2 个变量x和,它们都与内置变量( 和)i具有相同的值。NRFNR

print $2 > "HG"x".txt"是未定义的行为,因为 右侧的表达式周围没有括号>

当您使用除 GNU awk 之外的所有文件时,一旦超过阈值,不关闭输出文件将导致“打开文件过多”错误。

假设您的输入按第一个字段值分组,如示例中所示(如果不是,请sort首先在输入上运行):

awk '$1!=prev{close(out); out=sprintf("HG%06d.txt",++c); prev=$1} {print > out}' file.csv

如果您确实只想像代码中那样打印第二列,显然需要更改print > out为。print $2 > out

相关内容