位置: 编程技术 - 正文

Shell脚本实现乱序排列文件内容的多种方法(洗牌问题)(shell脚本ll)

编辑:rootadmin

推荐整理分享Shell脚本实现乱序排列文件内容的多种方法(洗牌问题)(shell脚本ll),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:shell脚本-le,shell脚本.sh,shell脚本-lt,shell脚本ne,shell脚本-lt,shell脚本wc,shell脚本一百例,shell脚本一百例,内容如对您有帮助,希望把文章链接给更多的朋友!

洗牌问题:洗一副扑克,有什么好办法?既能洗得均匀,又能洗得快?即相对于一个文件来说怎样高效率的实现乱序排列?

ChinaUnix 确实是 Shell 高手云集的地方,只要你想得到的问题,到那里基本上都能找到答案。r 给出了一个取巧的方法,利用 Shell 的 $RANDOM 变量给原文件的每一行加上随机的行号然后根据这个随机行号进行排序,再把临时加上去的行号给过滤掉,这样操作之后得到的新文件就相当于被随机“洗”了一次:当然如果你的源文件每行的内容比较复杂的话就必须对这段代码进行改写,但只要知道了处理的关键技巧,剩下的问题都不难解决。

另外一篇来自苏蓉蓉的用 awk 来实现洗牌效果的随机文件排序代码分析(原贴在这里,以及对此帖的一个后续讨论,如果你没有登录帐号的话可以到这里查看精华区文章)则写的更为详细:--------------------------------------------------------------------关于洗牌问题,其实已经有了一个很好的shell解法,这里另外给三个基于AWK的方法,有错误之处还请不吝指出。

方法一:穷举

类似于穷举法,构造一个散列来记录已经打印行出现行的次数,如果出现次数多于一次则不进行处理,这样可以防止重复,但缺点是加大了系统的开销。方法二:变换

基于数组下标变换的办法,即用数组储存每行的内容,通过数组下标的变换交换数组的内容,效率好于方法一。方法三:散列

三个方法中最好的。 利用AWK中散列的特性(详细请看:info gawk 中的7.x ),只要构造一个随机不重复的散列函数即可,因为一个文件每行的linenumber是独一无二的,所以用:

随机数+每行linenumber ------对应------> 那一行的内容

Shell脚本实现乱序排列文件内容的多种方法(洗牌问题)(shell脚本ll)

即为所构造的随机函数。 从而有:

其实大家担心的使用内存过大的问题不必太在意,可以做一个测试:

测试环境:

PM 1.4GHz CPU,G硬盘,内存M的LAPTOPSUSE 9.3 GNU bash version 3.. GNU Awk 3.1.4

产生一个五十几万行的随机文件,大约有M:拿效率较低的方法一来说:

洗牌一次所用时间:结果(文件内容省略):所以效率还是勉强可以接受的。

方法二的测试:结果(文件内容省略):效率明显好于第一个。

接着考察一下方法三的效率:结果(文件内容省略):对于一个M的文件来说已经相当不错了。--------------------------------------------------------------------

附带存一个来自 flyfly 写的 python 版本乱序代码:

Shell脚本实现生成SSL自签署证书 启用apache的mod_ssl之后需要有证书才能正常运作。写了个脚本来操作。首先要确定机器上已经有openssl。#!/bin/sh##ssl证书输出的根目录。sslOutputRoot="/etc/apach

Shell脚本中非交互式修改密码的两种方法 今天在写一个shell脚本的时候发现需要设置用户的密码,而设置密码是交互式的,这样在脚本中显然是不太好的,因此上网查找资料,发现了以下两种常

Shell脚本实现自动安装zookeeper A:本脚本运行的机器,LinuxRHEL6B,C,D,...:待安装zookeepercluster的机器,LinuxRHEL6首先在脚本运行的机器A上确定可以ssh无密码登录到待安装zk的机器B,C,D,...上,

标签: shell脚本ll

本文链接地址:https://www.jiuchutong.com/biancheng/381257.html 转载请保留说明!

上一篇:Shell脚本实现查杀子进程、僵尸进程(查看shell脚本)

下一篇:Shell脚本实现生成SSL自签署证书(shell脚本生成文件)

  • 劳务费个人所得税由谁申报
  • 小规模未达起征点免税分录
  • 自产自用应税消费品的消费税,其纳税环节
  • 万元版和十万元版可以一起用吗
  • 融资租赁如何确认收入
  • 作废的支票银行怎么处理
  • 工矿区城镇土地使用税
  • 银行漏记账会造成什么后果
  • 政府补助计入资本公积是老准则吗
  • 减免的增值税如何账务处理
  • 园林绿化工程的分项工程有几个
  • 企业所得税怎么征收
  • 关于保安员服务内容主要包括
  • 一个十图
  • 银行处置以物抵债违法吗
  • 本期准予扣除税额是什么
  • 跨年补计提工资汇算清缴
  • 固定资产报废后怎么处理
  • 增值税总分机构可以汇总纳税吗
  • 电信网费普通发票税率为什么是0
  • 施工企业代甲方购材料的账务处理?
  • 其他业务成本如何核算
  • 苹果手机m开头的序列号代表什么
  • 经常访问的网站怎么恢复
  • windows右键刷新总是卡住
  • 结转人工费会计分录
  • 异地设立的仓库怎么处理
  • 公司资产转让要交多少税
  • 固定资产未计提完毕怎么报废
  • 开出转账支票补付款项
  • 银行卡透支怎么还
  • Uncaught TypeError TypeError: Cannot set properties of null (setting ‘onclick‘)的解决办法
  • php顺序查找和二分查找
  • 金融商品转让业务包括
  • 冲销暂估入账应该填什么凭证
  • php跨域提交表单
  • 旅行社代订机票可以报销吗
  • 权益法的比例是多少
  • ps灰色模式怎么换回来快捷键
  • 高新技术企业相关税收政策
  • 银行日记账跨月登记方法
  • 企业破产员工补偿标准是按上年平均工资
  • 营业外收入汇算清缴时也得计入收入
  • 销售清单有法律效力吗
  • Windows7下Microsoft SQL Server 2008安装图解和注意事项
  • 用于员工福利的专票可以抵扣吗
  • 医药发票的税率是多少
  • 收到退回的增值税,应当作为营业外收入核算对吗
  • 施工企业暂估成本
  • 商业承兑汇票托收什么意思
  • 房屋租赁违约金比例
  • 年度所得税汇算清缴报告在哪打印
  • 私车公用涉及的税种有哪些
  • 为什么贷款要收手续费
  • 合资公司股东如何退股
  • 员工垫付的钱会计分录
  • 税控盘全额抵扣怎么做分录
  • 三方抵账协议做什么科目
  • 管理费怎么扣除
  • MySql insert插入操作的3个小技巧分享
  • 全面解析皮炎
  • 通过分析SQL语句的执行计划优化SQL
  • xp系统怎么删除应用程序
  • shell中awk命令
  • linux系统查看系统信息
  • find命令支持哪些查找方式
  • cocos2dx 教程
  • 举例说明Java实现适配器模式
  • cocos2dx怎么用
  • 前端笛卡尔积
  • 教女朋友学英语
  • python火车订票系统
  • 置顶聊天折叠怎么开启
  • jquery详解
  • js弹出对话框的命令
  • Flow之一个新的Javascript静态类型检查器
  • 境外服务收入如何纳税
  • 个人的社会信用代码怎么查
  • 保险机构如何代收车船税
  • 薰衣草商业价值
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设