打印列数乘以perl中其他列的值

时间:2019-06-24 20:46:13

标签: bash perl

我有与How to repeat values from a specific column?

相似的要求

我已经从上述问题和此答案(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 个答案:

答案 0 :(得分:4)

$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接受分隔符和列表 结合

执行此操作的方法可能很多,这对我来说很容易想到。