awk требуемые данные данные из файла и печать по столбцам

Наблюдение 1

Почему вы храните дерево портежей в своем домашнем каталоге?? Не волнуйтесь, после написания Наблюдения 2 я понимаю, почему . Увидев это, я вздрагиваю. Расположение по умолчанию должно быть:/usr/portage. Это расположение помогает при создании локальных оверлеев(usr/local/portageи отличает локальное дерево от синхронизируемого ), то есть пакетов с пользовательскими номерами версий или пакетов, которых нет в основном дереве портежей. Общепринято, что дерево и/или оверлеи в системе Gentoo являются системными компонентами и поэтому должны находиться в системном каталоге. Функции Portage контролируются файлами, находящимися в /etc/portage. См. Gentoo Portage Wiki . Ваш домашний каталог должен использоваться для вещей, которые вы загружаете или создаете. Это создает границу между системой и пользователем. Эта граница является основой для любой *системы NIX .

Наблюдение 2

Хотя ваш компилятор GCC в настоящее время нестабилен, это не является причиной вашей проблемы. См. Пакет Gentoo -sys -devel/gcc . Проблема заключается в версии sys -libs/glibc . Portage полагает, что у вас установлена ​​версия 2.25 -r11, но ваша хост-система (, отсюда и причина наблюдения 1. Как мне кажется, ваша установка находится внутри системы с другой версией или дистрибутивом linux )содержит и связано с версией 3.4.20. Portage собирает информацию о связывании с хоста, потому что он считает, что ваша хост-система - это система, на которой он установлен сам по себе, как работающая система. См. замечание #1.

См. Несколько библиотек glibc на одном хосте . Короче говоря, у вас есть несколько вариантов:

  1. Укажите Portage на правильные переменные среды, используя метод 1, описанный в вопросе, на который я дал ссылку, или
  2. Удалите вашу установку из вашего домашнего каталога,и Follow the Handbook(arch не имеет значения ), и опустите главу «Настройка загрузчика» вместе с «Завершение установки». Всегда используйте команду chrootдля входа в среду. Создайте пользователя в chroot и su userкаждый раз, когда вы входите в chroot.

    Совет :Создайте /home/username/mnt/gentoo

затем используйте процедуру Chrooting, описанную в Gentoo Handbook :Chrooting , указав chroot на /home/username/mnt/gentoo. После chroot создается граница наблюдения 1. Это заставит portage поверить, что он установлен на собственном хосте, потому что он соблюдает среду chroot.

  1. Используйте этот скрипт:Установите версию GNU libc, параллельную существующей системе , чтобы упростить вариант 1, хотя я бы не советовал этого делать, если вы делитесь своим хостом с другими пользователями, потому что, если вы установите параметр --prefixкуда-нибудь в свой домашний каталог, а затем поделиться своими программами с другими пользователями, он не будет работать.
0
10.05.2020, 04:20
3 ответа
awk '
    {name[$1]++}      #Counts how many times each name appear
    $3==20{x20[$1]++} #Counts how many times 20 appears in third column
    $3==22{x22[$1]++} #Counts how many times 22 appears in third column
    END{
        for (i in name){
            printf "%s %d %d %d\n",i,name[i],x20[i],x22[i]
        }
    }
' file

Выход:

mike 3 0 0
lawrence 2 0 2
mark 2 1 0
1
28.04.2021, 23:15

Концепция аналогична ответу @Quasimodo , но с использованием значений 20и 22в одном месте, а не в трех, и без жесткого -кодирования значений в именах массивов:

awk '
    { namesCnt[$1]++; pairsCnt[$1,$3]++ }
    END {
        for (name in namesCnt) {
            print name, namesCnt[name], pairsCnt[name,20]+0, pairsCnt[name,22]+0
        }
    }
' file
1
28.04.2021, 23:15

Чтобы вывести вывод в столбцы, как показано в вопросе, возьмите любой из других ответов(Квазимодо или ЭдМортона)и передайте его в column -t.

0
28.04.2021, 23:15

Теги

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