Таким образом, вот преступник:
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. Гугля вокруг, я думаю, что, возможно, испортил некоторые кавычки, делающие так. Теперь, я не могу фигурировать которые.
Это означает, что необходимо закрыть открытые дескрипторы файлов.
Это могло бы быть более чисто к
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) }
'