重复文本中的每一行 n 次

重复文本中的每一行 n 次

我有一个像这样的文件

888
924
873
1374
.....

这些点表示我有更多的字符串,大约 3000 个。我想重复每个字符串 n 次,得到类似这样的结果;

888
888
888
924
924
924
873
873
873
....

我尝试编写一个小的 bash 代码:

#! bin/bash

while IFS= read -r line

do 
    awk 'NR==line'
    awk 'NR==line'
    awk 'NR==line'
done < /<PATH_TO_FILE>

但我没有得到任何结果。我以为这是一个相当容易的任务,但显然我遗漏了一些东西。有什么建议吗?

答案1

可以轻松完成perl

perl -ne 'print $_ x 3' file

上面的一行输出:

$ perl -ne 'print $_ x 3' file
888
888
888
924
924
924
873
873
873
1374
1374
1374

只需根据您的需要更改示例值即可。

解决方案awk

awk '{for (i = 1; i <= 3; i++) print $1}' file

要修复你的 bash 脚本,我将使用以下代码片段:

#!/bin/bash

while read line
do
    for i in {1..3}; do echo $line; done
done < ./file

答案2

有一个很好的技巧可以重复打印字符串:

$ printf "%0.s-" {1..10}
----------

基于此,我们可以循环遍历文件并按照括号表达式所指示的次数打印该行:

while IFS= read -r line
do
printf "%0.s$line\n" {1..3}
done < file

测试

                          change this number as you wish
                                                       v
$ while IFS= read -r line; do printf "%0.s$line\n" {1..3}; done < a
888
888
888
924
924
924
873
873
873
1374
1374
1374

虽然我更喜欢使用awk这样的,但与其他人之前发布的非常相似(顺便说一下,答案很好):

awk -v tot=3 '{for (i=1; i<=tot; i++) print}' file

答案3

您可以简单地通过 sed 来完成此操作。

$ sed 's/\(.*\)/\1\n\1\n\1/g' file
888
888
888
924
924
924
873
873
873
1374
1374
1374

相关内容