多次但不同时间打印每一行

Sag*_*agi 1 large-files

我有一个巨大的文件,大约 4000000 行,看起来像这样:

文件:

1 
1 
2 
3 
2 
4 
...
Run Code Online (Sandbox Code Playgroud)

基本上,每一行都包含一个数字。考虑到这个例子,我想生成一个如下所示的文件:

新文件:

1 
1 
2 
2 
3 
3 
3 
2 
2 
4 
4 
4 
4 
....
Run Code Online (Sandbox Code Playgroud)

当 n 是存储在原始行中的数字时,我希望每行重复 n 次。

正如我所提到的,文件非常大,所以我正在寻找最快的方法。我认为目前,我实现的代码瓶颈是我需要重新打开新文件进行写入。

我现在就是这样做的,但速度非常慢

while read i; do seq 1 ${i} | xargs -i -- echo $i >> newFile ;done < file
Run Code Online (Sandbox Code Playgroud)

非常感谢。

Ste*_*itt 7

awk

awk '{ for (i = 1; i <= $1; i++) { print $0 } }' file > newFile
Run Code Online (Sandbox Code Playgroud)

这将读取一次输入文件并写入一次输出文件,永远不需要重新打开任何东西。


ste*_*ver 7

在 中perl,使用x字符串重复运算符:

$ perl -ne 'print $_ x $_' file
1
1
2
2
3
3
3
2
2
4
4
4
4
Run Code Online (Sandbox Code Playgroud)