Эффективный uid dovecot при аутентификации по ldap

Маршрут через временные файлы:

$ awk 'BEGIN { n = 1 } /^start newset/ { n++; next } { name = sprintf("tmp-%04d", n); print >name }' file

Это не приведет к выводу в терминал, но создаст файлы с именем tmp-n, где n— это заполненное нулем -четырехзначное -целое число, большее или равное 1. Будет один файл для каждый набор данных.

Затем мы можем склеить эти временные файлы вместе:

$ paste tmp-*
1 1.1   1 2.2   1 18.2
2 4.0   2 6.1   2 4.3
3 3.2   3 10.3
        4 2.1

или с пробелами в качестве разделителей вместо табуляции:

$ paste -d ' ' tmp-*
1 1.1 1 2.2 1 18.2
2 4.0 2 6.1 2 4.3
3 3.2 3 10.3
 4 2.1

Если в данных имеется большое количество наборов, с этим:

возникают две проблемы.
  1. У вас могут закончиться файловые дескрипторы в awk. От этого можно защититься, изменив второй кодовый блок awkс

    .
    { name = sprintf("tmp-%04d", n); print >name }
    

    -

    { name = sprintf("tmp-%06d", n); print >>name; close(name) }
    

    (обратите внимание на изменение строки форматирования, чтобы можно было использовать большие числа)

  2. Могут возникнуть проблемы с выполнением команды paste, так как шаблон tmp-*расширяется до слишком большого количества файлов. Дайте мне знать, если это проблема, и я разберусь с ней, тогда (будет цикл оболочки, который создает результат путем добавления столбцов из tmp-*файлов ).

0
10.06.2020, 12:12
0 ответов

Теги

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