如何才能按照另一列中给出的次数重复某一列中每个文本字段?

如何才能按照另一列中给出的次数重复某一列中每个文本字段?

我有一个文件,比如‘test.txt’,其中包含:

5 80  
3 70  
4 60  

现在我想创建一个看起来像楼梯/台阶的 R 图:5 个数据点的 y 值为 80,3 个数据点的 y 值为 70,4 个数据点的 y 值为 60,如下所示:

楼梯图示例

我怎样才能将其转变test.txttransformed.txt

80  
80  
80  
80  
80  
70  
70  
70  
60  
60  
60  
60  

在外壳上,或者,直接从 R 中打印图表test.txt

答案1

使用 Perl:

perl -pe 's/(\d+) (\d+\n)/$2 x $1/e' foo

这里:

  • -pe在每一行上运行表达式,然后自动打印
  • (\d+)匹配一串数字,并(\d+\n)匹配一串带有换行符的数字
  • 然后$2 x $1将第二个匹配的组复制与第一个匹配的组的值相同的次数。/e告诉 Perl 替换也将作为 Perl 表达式进行评估

答案2

大王适合于此:

awk '{while ($1-- > 0) print $2}' test.txt

这会将 的每一行解释为由空格分隔的字段记录。它从第一个字段 ( ) 的值test.txt开始倒数 ( ) ,直到该值为零,每次将第二个字段 ( ) 的值打印在其自己的行上。--$1$2

这种方法的优点之一是它可以自动容忍数字之前、之间或之后的多余空格。

具体来说:

如果你愿意,你可以使用for-环形

awk '{for (; $1 > 0; --$1) print $2}' test.txt

或者使用专用循环计数器多变的

awk '{for (i = $1; i > 0; --i) print $2}' test.txt

或者,如果你发现向上计数比向下计数更直观,你可以这样做:

awk '{for (i = 0; i < $1; ++i) print $2}' test.txt

相关内容