【发布时间】:2018-03-05 10:47:40
【问题描述】:
我正在使用下面的代码来过滤我的源文件。 此代码包含多个 gsub 条件
但这里的问题是由于多个 gsub,脚本需要大量时间来执行和解析另一个文件中的数据。 您能否请我知道实现这些条件的其他方法,以便我的脚本可以更快地执行
awk -F"[ \t]" -v OFS="|" '{gsub(/^[ \t]+|[ \t]+$/,"");gsub(/"/,"");gsub(/[[:blank:]]+|\.|\-/,"",$32);gsub(/[[:blank:]]+|\.|\-/,"",$13);gsub(/^[[:space:]]+|[[:spa
ce:]]+$|\,/,"",$38);gsub(/^[[:space:]]+|[[:space:]]+$|\,/,"",$42);gsub(/^[[:space:]]+|[[:space:]]+$|\,/,"",$44);gsub(/^[[:space:]]+|[[:space:]]+$/,"",$27);gsub(/^[[:spa
ce:]]+|[[:space:]]+$/,"",$40);gsub(/^[[:blank:]]+|[[:blank:]]+$/,"",$18);
这里是相同的代码,但为了便于阅读(仅出于可读性目的)分成几部分:
awk -F"[ \t]" -v OFS="|" '{gsub(/^[ \t]+|[ \t]+$/,"");
gsub(/"/,"");
gsub(/[[:blank:]]+|\.|\-/,"",$32);
gsub(/[[:blank:]]+|\.|\-/,"",$13);
gsub(/^[[:space:]]+|[[:space:]]+$|\,/,"",$38);
gsub(/^[[:space:]]+|[[:space:]]+$|\,/,"",$42);
gsub(/^[[:space:]]+|[[:space:]]+$|\,/,"",$44);
gsub(/^[[:space:]]+|[[:space:]]+$/,"",$27);
gsub(/^[[:space:]]+|[[:space:]]+$/,"",$40);
gsub(/^[[:blank:]]+|[[:blank:]]+$/,"",$18);
如果需要输入文件,请告诉我,将分享它
【问题讨论】:
-
现在需要多少时间来处理一个多大的文件?它必须运行多快才能对您有用?
-
恭喜你写了这篇文章。但请解释它的作用。每个 gsub 都有特定的用途,我们不知道。请阅读stackoverflow.com/help/mcve。知道目的或目标后,我们或许可以提出其他建议以更快地获得相同的结果。一个示例输入文件(不是超大文件,用于说明需求)会有所帮助。
-
嗨 Jas,输入文件大约 400MB,需要 2-3 小时。需要一种我可以在 20-25 分钟内执行的方法。
-
使用“更好”的语言重写。在速度方面更好。我使用 perl 脚本替换了 bash 脚本,结果令人惊讶。
-
@as7951:发布您的输入文件的 sn-p 并向我们展示您想要实现的具体目标。
标签: linux bash shell awk scripting