我有一个像这样的文件
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