相关疑难解决方法(0)

Perl比bash更快吗?

我有一个bash脚本,它在两个时间戳之间切出一个日志文件的一部分,但由于文件的大小,运行需要很长时间.

如果我要在Perl中重写脚本,我可以实现显着的速度提升 - 或者我是否必须转向像C这样的东西才能实现这一目标?

#!/bin/bash

if [ $# -ne 3 ]; then
  echo "USAGE $0 <logfile(s)> <from date (epoch)> <to date (epoch)>"
  exit 1
fi

LOGFILES=$1
FROM=$2
TO=$3
rm -f /tmp/getlogs??????
TEMP=`mktemp /tmp/getlogsXXXXXX`

## LOGS NEED TO BE LISTED CHRONOLOGICALLY
ls -lnt $LOGFILES|awk '{print $8}' > $TEMP
LOGFILES=`tac $TEMP`
cp /dev/null $TEMP

findEntry() {
  RETURN=0
  dt=$1
  fil=$2
  ln1=$3
  ln2=$4
  t1=`tail -n+$ln1 $fil|head -n1|cut -c1-15`
  dt1=`date -d "$t1" +%s`
  t2=`tail -n+$ln2 $fil|head -n1|cut -c1-15`
  dt2=`date -d "$t2" +%s`
  if [ $dt …
Run Code Online (Sandbox Code Playgroud)

bash optimization perl comparison performance

11
推荐指数
4
解决办法
1万
查看次数

perl正则表达式中的源和运行shell函数

问题

我试图在perl cmd执行块中重用脚本中稍后在bash脚本中定义的shell函数.对匹配一个正则表达式(捕获组#2)后,对perl cmd的调用基本上需要运行定义的shell函数.请参阅下面的代码定义

代码

bash shell脚本中的相关函数定义:

    evalPS() {
        PS_ARGS=$(eval 'echo -en "'${1}'"' | sed -e 's#\\\[##g' -e 's#\\\]##g')
        PS_STR=$((set +x; (PS4="+.$PS_ARGS"; set -x; :) 2>&1) | cut -d':' -f1 | cut -d'.' -f2)
        echo -en "${PS_STR}"
    }
Run Code Online (Sandbox Code Playgroud)

上面的定义使用一些bashisms和hacks来评估用户对字符串的真实提示.

需要在下一个函数中在perl调用该函数:

    remPS() {
        # store evalPS definition
        EVALPS_SOURCE=$(declare -f evalPS)
        # initalize prompt
        eval "$PROMPT_COMMAND" &> /dev/null
        # handle args
        ( [[ $# -eq 0 ]] && cat - || cat "${1}" ) |
        # …
Run Code Online (Sandbox Code Playgroud)

regex bash shell perl function

7
推荐指数
1
解决办法
337
查看次数

标签 统计

bash ×2

perl ×2

comparison ×1

function ×1

optimization ×1

performance ×1

regex ×1

shell ×1