我有一个巨大的文件,大约 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)
非常感谢。
在awk
:
awk '{ for (i = 1; i <= $1; i++) { print $0 } }' file > newFile
Run Code Online (Sandbox Code Playgroud)
这将读取一次输入文件并写入一次输出文件,永远不需要重新打开任何东西。
在 中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)