我有一个文件(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
具有相同的值。NR
FNR
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