我必须有条件地将一个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" n
,n
是某个计数器)构造它们,或者...