使用sed删除行块:需要更长的时间

时间:2014-04-29 08:54:29

标签: performance awk sed

这是我最近发布的帖子(Removing chunks of lines with sed)的扩展名。

我已经给了它"检查"但后来我意识到它对我的实际文件可能不太好。我的文件非常大,提供给我的解决方案随着时间的推移打印出来,这需要花费太长时间。有没有人知道一个解决方案是快速大文件可能只是删除行而不是复制和粘贴等?

问题:

我正在尝试浏览一个文件,并在每个连续的40行组中保留一个连续的4行组。

所以在整个文件中,我会保留1-4,41-44,81-84行等。 我尝试使用sed,但我真的只能删除特定的行,而不是像这样的模式。

以前的解决方案:

awk '{for (i=1;i<5;i++) if (NR%40==i) print $0}' file
//That prints as it goes

awk 'NR%40~/^[1-4]$/' file
// This requires it to print to a new file by adding " > file2" at the end, which I think is slower than necessary.

任何更好的解决方案可以节省时间吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

  

我尝试使用sed,但我真的只能删除特定的行,   不要做这样的模式。

你可以使用GNU sed:

sed -n '1~40p;2~40p;3~40p;4~40p' filename

例如:

$ seq 100 | sed -n '1~40p;2~40p;3~40p;4~40p' 
1
2
3
4
41
42
43
44
81
82
83
84