多次但不同时间打印每行

多次但不同时间打印每行

我有一个巨大的文件,大约有 4000000 行,如下所示:

文件:

1 
1 
2 
3 
2 
4 
...

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

新文件:

1 
1 
2 
2 
3 
3 
3 
2 
2 
4 
4 
4 
4 
....

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

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

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

while read i; do seq 1 ${i} | xargs -i -- echo $i >> newFile ;done < file

非常感谢。

答案1

awk

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

这将读取一次输入文件并写入一次输出文件,无需重新打开任何内容。

答案2

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

$ perl -ne 'print $_ x $_' file
1
1
2
2
3
3
3
2
2
4
4
4
4

相关内容