awk 有条件地将大文件拆分为多个输出文件

awk 有条件地将大文件拆分为多个输出文件

我必须有条件地将一个90 GB的文件拆分为多个文件(该文件是一个多表文件,要按单个表拆分)。

我在 ksh 和 awk 中创建了一个解决方案,它在表规则上循环,并使用 awk 选择是否在输出文件中打印。问题是对于 29 条规则,我必须读取源文件 (90 GB) 29 次。

是否可以通过一次读取源文件来写入多个文件,并有条件地重定向到一个或另一个输出?

答案1

您可以使用重定向(它是由 POSIX 指定的,因此应该可用于其他 awks)。一个简单的例子:

$ awk '$1 % 2 {print > "odd"; next} {print > "even"}' <(seq 1 10)
$ tail -n +1 odd even                                            
==> odd <==
1
3
5
7
9

==> even <==
2
4
6
8
10

因此,您可以创建一个包含 29 个文件名的数组,或者使用变量(print > "filenum" nn是某个计数器)构造它们,或者...

相关内容