awk: не может открыть “имя файла” для вывода (Слишком много открытых файлов)

Таким образом, вот преступник:

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

0
задан 23 October 2018 в 15:37

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) }
'
1
ответ дан 27 October 2019 в 07:02

Другие вопросы по тегам:

Похожие вопросы: