我的任务是创建一个以一个巨大的文本文件作为输入的脚本。然后它需要找到所有单词和出现的次数,并创建一个新文件,每行显示一个唯一的单词及其出现的次数。在

以包含以下内容的文件为例:Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor

incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud

exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure

dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt

mollit anim id est laborum.

我需要创建一个如下所示的文件:

^{pr2}$

为此,我使用tr、sort和{}编写了一个脚本:#!/bin/sh

INPUT=$1

OUTPUT=$2

if [ -a $INPUT ]

then

tr '[:space:][\-_?!.;\:]' '\n' < $INPUT |

tr -d '[:punct:][:special:][:digit:]' |

tr '[:lower:]' '[:upper:]' |

sort |

uniq -c > $OUTPUT

fi

它的作用是按空格分隔单词。如果单词包含-_?!.;:,我会再次将它们分解成单词。我删除了标点符号、特殊字符和数字,并将整个字符串转换为大写。完成后,我对它进行排序并通过uniq将其转换为我想要的格式。在

现在我下载了txt格式的圣经,并用它作为输入。我得到的时机:scripts|$ time ./text-to-word.sh text.txt b

./text-to-word.sh text.txt b 16.17s user 0.09s system 102% cpu 15.934 total

我对Python脚本也做了同样的处理:import re

from collections import Counter

from itertools import chain

import sys

file = open(sys.argv[1])

c = Counter()

for line in file.readlines():

c.update([re.sub('[^a-zA-Z]', '', l).upper()

for l in chain(*[re.split('[-_?!.;:]', word)

for word in line.split()])])

file2 = open('output.txt', 'w')

for key in sorted(c):

file2.write(key + ' ' + str(c[key]) + '\n')

当我执行脚本时,我得到了:scripts|$ time python text-to-word.py text.txt

python text-to-word.py text.txt 7.23s user 0.04s system 97% cpu 7.456 total

如您所见,它运行在7.23s中,而shell脚本运行在16.17s中。我尝试过使用更大的文件,而Python似乎总是成功的。我有几个问题要问上面的塞纳里奥:既然shell命令是用C编写的,为什么Python脚本更快?我知道shell脚本可能不是最佳脚本。在

如何改进shell脚本?在

我可以改进Python脚本吗?在

明确地说,我并不是在比较Python和shell脚本。我不想挑起一场战争,也不需要任何其他语言的答案来比较自己更快。使用UNIX的原理,通过管道发送小命令来完成任务,如何使shell脚本更快?在

python和shell哪个快_有没有可能让这个shell脚本更快?相关推荐

  1. ac2100 反弹shell无法粘贴_记一次突破反弹shell

    背景 某天闲着无聊,小伙伴发来一个某网站,说只能执行命令,不能反弹shell. 测试 对着目标站点一顿测试. 发现确实存在shiro反序列化,并且存在可以利用的gadget.利用 发现确实可以执行命令 ...

  2. rac一节点时间比另一个节点快_数据库数据那么多为什么可以检索这么快?

    你好,是我琉忆. 经常跟数据打交道的你,有没有去考虑过数据上百万,为什么它可以检索那么快? 一说到数据库的检索速度这么快,我想你一定想到了索引. 没错,今天我们来简单聊聊索引,聊聊索引是什么,怎么使用 ...

  3. 世纪前线网络质量测试工具 是什么_卓拙科技 | 为全球用户打造更快、更稳定、更安全的的网络环境...

    成都IT内推圈成立于2016年,专注成都IT互联网领域的招聘与求职;覆盖精准IT人群10W+,通过内推圈推荐且已入职人数超过5000+,合作公司均系成都知名或靠谱公司.此公众号每天7:30AM准时推送 ...

  4. 快做这 15点,让 SpringBoot 启动更快一点!

    "Spring有多快?" 这是 2018 Spring One Platform 中的一场会议.看完会议视频,我自己动手试了一下.下面是我做出的测试结果. 还没有观看视频的朋友推荐 ...

  5. python while-Python天坑系列(一):while 1比while True更快?

    更多 0. 前言 前些天被Python的多线程坑了一把,因此产生了写一个<Python天坑系列>博客的想法,说说我碰到的那些Python的坑. 而天坑这个词呢,一方面指Python的坑,另 ...

  6. 为什么我的mysql比redis快_为什么redis是单线程的以及为什么这么快?

    官网的说法 我们先来认真看一下官网的说法.翻译过来大意如下: CPU并不是您使用Redis的瓶颈,因为通常Redis要么受内存限制,要么受网络限制.例如,使用在一般Linux系统上运行的流水线Redi ...

  7. 2020移动apn接入点哪个快_为什么别人的4g网总比你快? 手机这个设置没开启, 难怪网络...

    在效率至上的今天,如果手机4G网速慢,是让人无法忍受的一件事,特别是我们看电影.打游戏的时候,如果网速不好真的是让人崩溃情,你有没有发现有时候同样是4G网,别人的网速一点都不卡,而你整把游戏都在460 ...

  8. 2020移动apn接入点哪个快_为什么别人的4g网总比你快?手机这个设置没开启,难怪网络...

    阅读本文前,请您先点击上面的蓝色字体"说说世界",再点击"关注" 在效率至上的今天,如果手机4G网速慢,是让人无法忍受的一件事,特别是我们看电影.打游戏的时候, ...

  9. 2020移动apn接入点哪个快_为什么别人的4g网总比你快? 手机这个设置没开启, 难怪网络差...

    在效率至上的今天,如果手机4G网速慢,是让人无法忍受的一件事,特别是我们看电影.打游戏的时候,如果网速不好真的是让人崩溃情,你有没有发现有时候同样是4G网,别人的网速一点都不卡,而你整把游戏都在460 ...

最新文章

  1. mergesort_Mergesort算法的功能方法
  2. 0限流电阻 stm32_上/下拉电阻
  3. css sprites原理,[css] 第17天 解释下 CSS sprites的原理和优缺点分别是什么?
  4. 【阿圆总结】关于平时阅读的推荐
  5. 学习之法 —— 套路
  6. 【优化算法】混合灰狼优化布谷鸟搜索优化算法(AGWOCS)【含Matlab源码 1540期】
  7. pythonsocket中tcp通信接收不到数据_简单说说Python Socket编程步骤?
  8. 学习TP5(一):TP5框架下载与快速入门使用
  9. 云服务器哪家好?国内云服务器十大品牌排行榜
  10. Kubuntu下root登录
  11. dragonfly数据库
  12. 双十一特辑:Python采集商品数据,实时了解商品价格
  13. 软件测试知识点和面试题--app测试篇
  14. 文件服务器之:NFS服务器
  15. 2020年超级计算机排名,2020中国高性能计算机TOP100榜单正式发布
  16. 懒人福利!传沃尔玛计划将超市购物车变为智能机器人
  17. C++小游戏笔记——射击小行星(附源码)
  18. 开源机器学习工作流Ploomber
  19. Iconfont 开源库 Iconic 使用 方便你使用svg图片。随意更改你的色调。
  20. ispm14:软考高项(信息系统项目管理师)重要考点

热门文章

  1. c++ template笔记(2)模板类
  2. const的用法,特别是用在函数前面与后面的区别
  3. stm32f102 SPI口重复初始化引起的问题及解决办法
  4. RTC_WaitForSynchro()
  5. CRFsuite:CRF 工具包及sklearn-crfsuite
  6. C++ Primer 5th笔记(chap 11)关联容器操作
  7. [HOW TO]-ubuntu20.10搭建openjrok服务指南
  8. bl 和 ldr跳转程序的区别
  9. Android锁机样本分析
  10. MFC控件的绘制与响应顺序——ZOrder