Как разбить каждое значение на отдельные строки и отсортировать?

Настройка разрешений может привести к путанице, но на самом деле это не так. В общем, вам нужно сделать три вещи:

Создать пользователя

useradd -d /home/someuser -s /bin/bash someuser
sudo mkdir /home/someuser

Это настроит нового пользователя "some user" с домашним каталогом /home/someuser/ и использованием bash по умолчанию. оболочка.

Назначить пользователя sudoer

visudo

Это откроет /etc/sudoers в nano. Если у вас есть другой редактор, вы всегда можете использовать его. Добавьте следующий файл под записью «root».

someuser ALL=(ALL:ALL) ALL

Сохраните файл, и теперь ваш новый пользователь someuser является sudoer.

Установите пароль нового пользователя.

Чтобы завершить этот процесс, добавьте пароль для пользователя, чтобы он мог выполнять sudo. Если они захотят изменить пароль позже, они могут это сделать с помощью команды sudo passwd.

sudo passwd someuser
-- then enter password && conf

Ваш новый пользователь теперь имеет возможность sudo получить доступ ко всему, что может root. Вы можете использовать событие sudo su, чтобы действовать как root. Чтобы проверить это, выйдите из Kali как root и снова войдите в систему как новый пользователь. Или просто запустите su - someuser и попробуйте sudoing.

Кроме того, предоставьте новому пользователю право собственности на его домашний каталог, используя chown -R someuser /home/someuser

0
10.08.2017, 23:58
4 ответа

Вот решение на Perl:

cat b.txt 
(0,1,{35=9000.0, 36=9000.0, 33=9000.0, 34=9000.0})

perl -lne '$_=~/^\(([\d\,\.]+)\s*\{(.*)\}\)$/; @first=split /[,\s]/, $1; @second=split /,\s/, $2; map{($k, $v) = split "=", $_; $h{$k}=$v} @second; foreach $k (sort keys(%h)) { print join(" ", @first), " $k ",$h{$k}; }' b.txt
0 1 33 9000.0
0 1 34 9000.0
0 1 35 9000.0
0 1 36 9000.0

(Конечно, эту программу на Perl будет намного легче читать, если использовать более одной строки и если я буду знать, как присваивать значения переменным)

2
28.01.2020, 02:15
  1. Для каждой строки ввода $n<= десятичное значение перед запятой.
  2. хэш %h, ключами которого являются числа слева от = и значения справа.
  3. , затем численно отсортируйте ключи и напечатайте $n, key, coresp. ценность.
  4. $,= OFS<= $"= разделитель выходного списка, по умолчанию пробел.

perl -lne '$,=$";
   ($n, %h) = ( /^\((\d+),/, /(\d+)=([^,}]+)/g );
   print $n, $_, $h{$_} for sort { $a <=> $b } keys %h;
' yourfile

Результаты:

0 33 9000.0
0 34 9000.0
0 35 9000.0
0 36 9000.0
1
28.01.2020, 02:15

Вот решение awk:

sed 's/=/ /' <(awk -F"[,)(}{]" '{
                  for (i=4;i<NF;i+=2){printf"%s %s\n",$2,$i|"sort -nk2,3"}}
              ' infile.txt)

Выдача вывода:

0 33 9000.0
0 34 9000.0
0 35 9000.0
0 36 9000.0

, если ваши входные данные приведены ниже (, как это реализовано в ответе @Fedor):

(0,1,{35=9000.0, 36=9000.0, 33=9000.0, 34=9000.0})

Тогда команда будет:

sed 's/=/ /' <(awk -F"[,)(}{]" '{
                  for (i=5;i<NF;i+=2) {printf "%s %s %s\n",$2, $3,$i|"sort -nk2,3"}}
              ' infile.txt)

И вывод:

0 1 33 9000.0
0 1 34 9000.0
0 1 35 9000.0
0 1 36 9000.0
2
28.01.2020, 02:15

GNUawkрешение:

awk -F'[,=]' '{ gsub(/[({}) ]/,"",$0); for(i=2;i<NF;i+=2) a[$i]=$(i+1); 
                asorti(a,b); for(k in a) print $1,k,a[k] }' file
  • -F'[,=]'-разделитель полей

  • gsub(/[({}) ]/,"",$0)-удаление ненужных символов

  • for(i=2;i<NF;i+=2) a[$i]=$(i+1)-сбор пар значений в массивa

  • asorti(a,b)-сортировать массив aпо ключам


Выход:

0 33 9000.0
0 34 9000.0
0 35 9000.0
0 36 9000.0
1
28.01.2020, 02:15

Теги

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