罪魁祸首就是这里:
zcat Merged.csv.gz | awk -F, 'FNR == 1 {header = $0; next} !seen[$7]++ {print header | "gzip > data/S20180528_"$7".txt.gz"} {print | "gzip > data/S20180528_"$7".txt.gz";}'
当我在这个大文件(Merged.csv.gz)上运行它时,我得到:
awk: cannot open "gzip > data/S20180528_2505329.txt.gz" for output (Too many open files)
我通过粘贴在这里和 stackoverflow 上找到的部分内容创建了原始命令。在 Google 上搜索后,我觉得这样做可能弄乱了一些引号。现在,我不知道是哪些引号。
答案1
这意味着您必须关闭打开的文件句柄。
可能更干净
zcat Merged.csv.gz |
awk -F, '
FNR == 1 {header = $0; next}
!seen[$7]++ {
file[$7] = "data/S20180528_"$7".txt"
print header > file[$7]
close(file[$7])
}
{print >> file[$7]; close(file[$7])}
END {
for (f in file) system("gzip " file[f])
}
'
由于文件按第 7 列排序:
zcat Merged.csv.gz | awk -F, '
FNR == 1 {header = $0; next}
$7 != key {
if (file) {
close(file)
system("gzip " file)
}
file = "data/S20180528_" $7 ".txt"
key = $7
print header > file
}
{print > file}
END { close(file); system("gzip " file) }
'