首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >性能调优AWK?

性能调优AWK?
EN

Stack Overflow用户
提问于 2016-02-12 17:53:34
回答 2查看 692关注 0票数 1

我用BASH编写了一个简单的解析器来分解csv文件并转储到(temp) SQL-输入文件。这方面的性能非常糟糕;在现代系统上运行时,我几乎每秒只能破解100行。我意识到最终的答案是用一种更注重性能的语言来重写它,但是作为一个学习机会,我很好奇我在哪里可以提高我的BASH技能。我怀疑写到一个ram而不是一个文件中,然后立即将所有的文本刷新到该文件中是可以获得好处的,但是我不清楚BASH在什么地方/什么时候对内存的使用感到不高兴(我分析过的最大文件都在500‘m以下)。

下面的代码块似乎占用了大部分的周期,据我所知,由于检查时间戳(数据有时间戳,但没有时间戳,所以我被迫向用户询问开始日期并检查时间戳是否循环到24:00 -> 0:00),因此并行处理似乎不是一种选择。

代码语言:javascript
复制
        while read p; do
          linetime=`printf "${p}" | awk '{printf $1}'`
          # THE DATA LACKS FULL DATESTAMPS, SO FORCED TO ASK USER FOR START-DAY & CHECK IF THE DATE HAS CYCLED
          if [[ "$lastline" > "$linetime" ]]
              then
            experimentdate=$(eval $datecmd)
          fi
          lastline=$linetime
          printf "$p" | awk -v varout="$projname" -v experiment_day="$experimentdate " -v singlequote="$cleanquote" '{printf "insert into tool (project,project_datetime,reported_time,seconds,intensity) values ("singlequote""varout""singlequote","singlequote""experiment_day $1""singlequote","singlequote""$1""singlequote","$2","$3");\n"}' >> $sql_input_file

忽略单引号的胡说八道,我需要这两个OSX和'nix运行,所以我必须解决一些问题与OSX的awk和单引号。

有什么建议可以提高我的表现吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-12 22:13:23

您不希望为循环中处理的每一行启动awk。用awk替换循环,或用内置命令替换awk。

这两个awk只用于印刷。用printf命令的其他参数替换这些行。我不理解datecmd的代码块(不是使用$linetime,而是使用输出变量experimentdate),但是应该对这个代码进行优化:您可以使用正则表达式或其他技巧吗?

因此,您没有调优awk,但决定完全使用awk,或者将其从while循环中删除。

票数 2
EN

Stack Overflow用户

发布于 2016-02-12 18:13:34

如果使用awk完成所有处理,您的性能就会提高。Awk可以直接读取输入文件,表示条件,并运行外部命令。

Awk也不是唯一一个。Perl和Python非常适合这个任务。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35369168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档