【发布时间】:2009-12-01 19:13:47
【问题描述】:
我继承了这个 sed 脚本 sn-p,它试图删除某些空格:
s/[\s\t]*|/|/g
s/|[\s\t]*/|/g
s/[\s] *$//g
s/^|/null|/g
对大约 1Gb 大的文件进行操作。该脚本在我们的 unix 服务器上运行了 2 个小时。任何想法如何加快它?
注意 \s 代表空格,\t 代表制表符,实际脚本使用实际的空格和制表符,而不是那些符号
输入文件是一个管道分隔文件,位于本地而不是网络上。这 4 行在使用 sed -f 执行的文件中
【问题讨论】:
-
你是如何调用 sed 的?该文件是否确实在您的本地磁盘上,而不是在 NFS 挂载上?
-
本地磁盘上的文件。我正在使用 sed -f 调用 sed
-
请给出您正在使用的整个命令行。普通的
sed -f从标准输入读取并写入标准输出,这显然不是你在做什么。 -
我不认为这真的有必要....假设
sed -f < input.txt > output.txt -
我刚刚在一个填充了示例数据的 1.2GiB 数据文件上尝试了我的 C 实现。在一台 10 岁的 800 MHz Pentium III 上花费了 4 分 17 秒。虽然诚然它可能会根据实际输入而有所不同,但我认为它很有可能会显着优于您的 sed 脚本;)
标签: linux performance unix sed