Слова группы на основе значения первого столбца

[112428] Я думаю, что ошибки, которые вы видите, относятся к подсистеме Changelog APT. Вы можете либо отключить его, либо удалить все вместе.

1. чтобы отключить

В файле [113078]/etc/apt/listchanges.conf[113079] откройте его в текстовом редакторе и измените строку [113080]frontend[113081] на none.

Также можно временно сделать это через переменную окружения перед выполнением команды [113082]apt-get...[113083]:

2. чтобы удалить [12169]Попробуйте выполнить любую из этих операций и повторите команду, чтобы проверить, все ли чисто.[112439].

1
20.10.2014, 19:57
2 ответа

Можно использовать переключатель -o для указания формата вывода:

$ ps -eo args

На главной странице :

Команда со всеми ее аргументами в качестве последовательности. Могут быть показаны изменения аргументов. [...]

Для выбора конкретного PID можно также использовать переключатель -p :

$ ps -p [PID] -o args

pidof также может использоваться для переключения с имени процесса на PID, что позволяет использовать -p с именем:

$ ps -p $(pidof dhcpcd) -o args

Для этого можно также использовать grep (в этом случае необходимо добавить переключатель -e ):

$ ps -eo args | grep dhcpcd | head -n -1

GNU ps также позволит удалить заголовки (конечно, это не обязательно при использовании grep ):

$ ps -p $(pidof dhcpcd) -o args --no-headers

В других системах, вы можете направить в AWK или sed:

$ ps -p $(pidof dhcpcd) -o args | awk 'NR > 1'
$ ps -p $(pidof dhcpcd) -o args | sed 1d

Edit: если вы хотите поймать эту строку в переменную, просто используйте $ (...) как обычно:

$ CMDLINE=$(ps -p $(pidof dhcpcd) -o args --no-headers)

или с grep :

$ CMDLINE=$(ps -eo args | grep dhcpcd | head -n -1)
-121--8932-

Метод # 1 - С помощью ps

можно использовать ps -eaf | grep 1234 .

Пример

$ ps -eaf | grep 28865
saml     28865  9661  0 03:06 pts/2    00:00:00 bash -c sleep 10000; while [ 1 ];do echo hi;sleep 10;done
saml     28866 28865  0 03:06 pts/2    00:00:00 sleep 10000

ПРИМЕЧАНИЕ: ps Busybox не включает переключатели - eaf , как показано выше, из типичного ps , который входит в состав большинства Linuxes, однако ps Busybox показывает, что выглядит очень похожим на результат из приведенного примера. Вы можете установить Busybox на большинстве Linuxes и запустить его так:

$ busybox ps
  852 root       0:00 /sbin/auditd -n
  855 root       0:01 /sbin/audispd
  857 root       0:00 /usr/sbin/sedispatch
  866 root       0:00 /usr/sbin/alsactl -s -n 19 -c -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf --initfile=/lib/alsa/init/00main rdaemon
  867 root       0:00 /usr/libexec/bluetooth/bluetoothd
  869 root       0:01 {firewalld} /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
  871 root       0:32 /usr/libexec/accounts-daemon
  873 rtkit      0:05 /usr/libexec/rtkit-daemon
  875 root       0:00 /usr/sbin/ModemManager
  876 avahi      0:03 avahi-daemon: running [dufresne.local]
  878 root       0:54 /usr/sbin/irqbalance --foreground
  884 root       0:00 /usr/sbin/smartd -n -q never
  886 avahi      0:00 avahi-daemon: chroot helper
  891 chrony     0:01 /usr/sbin/chronyd
  892 root       0:01 /usr/lib/systemd/systemd-logind
  893 dbus       1:28 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation

Method # 2 - Using/proc

Вы также можете просмотреть файл cmdline , который каждый PID имеет в /proc/< pid > .

$ cat /proc/28865/cmdline 
bash-csleep 10000; while [ 1 ];do echo hi;sleep 10;done

Но обратите внимание, что в нем отсутствует интервал. Это связано с тем, что в этом файле используется символ NUL для разделения аргументов командной строки. Но не беспокойся, их можно убрать.

$ tr '\0' ' ' </proc/28865/cmdline
bash -c sleep 10000; while [ 1 ];do echo hi;sleep 10;done

Ссылки

-121--8934-

Если я правильно понимаю, вы ищете

perl -lane 'push @{$k{$F[0]}},$F[1]; 
            END{$"=", ";print "$_ @{$k{$_}}" for sort keys(%k)}' file

Нет причин явно разделять строку, флаг -a уже делает это для вас. Каждая входная строка будет разделена на массив @ F . Итак, здесь мы создадим хэш % k , чьи ключи являются 1-м полем и чьи значения являются соответствующими списками 2-го поля. Затем в конце отсортируем хэш-ключи, установим разделитель списка ( $ ") на , [космос] и распечатаем каждый ключ и соответствующий ему список значений.

4
27.01.2020, 23:13

Другой perl:

$ perl -anle '
    push @{$h{$F[0]}}, $F[1];
    END {
        for (sort {$a <=> $b} keys %h) {
            print "$_ ", join(", ", @{$h{$_}});
        }
    }
' file
1 foo, foobar
2 bar, barbar
3 apple, mango
4 banana
5 orange

Объяснение

  • Мы создаем хэш $h, ключами которого являются значение $F[0]. Каждое значение хэша является ссылкой на массив. При обработке каждой строки мы добавляем значение второго поля $F[1] к ссылке на массив push @{$h{$F[0]}}, $F[1].

  • После обработки всех строк сортируем ключи $h (сортируем {$a <=> $b} ключи %h), присоединяем каждый массив со ссылкой на строку (join(", ", @{$h{$_}})), вывешиваем каждый ключ, соответствующий строке join.

3
27.01.2020, 23:13

Теги

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