вывести столбец количество раз значение другого столбца в Perl - PullRequest
0 голосов
/ 24 июня 2019

У меня такое же требование, как в Как повторить значения из определенного столбца?

Я уже знаю решение из вышеупомянутого вопроса и этого ответа (https://stackoverflow.com/a/56743282/6309601)., но ради обучения perl, я пытаюсь сделать это с perl. Никакой другой причины.

echo "$y"
5 aws
2 openstack
1 azure
3 others

Я могу напечатать данные, но не могу понять, почему в выходных данных появляются пробелы.

echo "$y" |perl -lanE 'say "$F[1]\n" x "$F[0]"'
aws
aws
aws
aws
aws

openstack
openstack

azure

others
others
others

Может кто-нибудь помочь мне объяснить, почему добавлены лишние пробелы?

1 Ответ

4 голосов
/ 24 июня 2019

Новая строка после $F[1] вызывает дополнительную строку между группами.Вы можете избежать этого, слегка изменив свой код, чтобы использовать повторение в контексте списка + объединение:

echo '5 aws
2 openstack
1 azure
3 others' | perl -lanE 'say join "\n", ($F[1]) x $F[0]'
# aws
# aws
# aws
# aws
# aws
# openstack
# openstack
# azure
# others
# others
# others

Примечания:

  • xОператор в контексте списка (вызванный круглыми скобками $F[1]) возвращает список повторенных элементов.например, («aws») x 3 вернет «aws», «aws», «aws»
  • join принимает разделитель и список для объединения

Вероятно, есть много способов сделать это, это просто тот, который мне легко пришёл в голову.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...