我有一个巨大的文件,大约有 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