1.请问AWK和Python两个脚本语言,源码在处理字符串的源码时候,哪一个更快,源码可以给出详细的源码例子和说明吗?
2.MyFlash——美团点评的开源MySQL闪回工具
3.äºè®¡ç®ä¸ä¸è¯¾ç¨
4.linux awkå½ä»¤
请问AWK和Python两个脚本语言,在处理字符串的源码时候,哪一个更快,源码暴走漫画源码可以给出详细的源码例子和说明吗?
是啊,楼上说得对,源码awk的源码命令行复杂起来没法看,哪里有python优美?perl处理字符串是源码强,不过也难读懂啊。源码很多时候只有一个文件,源码就直接用vi了。源码
awk学了就能处理文本,源码学了python可有用多了。源码
速度的话,估计awk快些,因为多半是C写的,没测试过也无法下定论。刷脸插件源码
MyFlash——美团点评的开源MySQL闪回工具
闪回工具的现状及理想特性
当前市场上存在多种数据恢复工具,它们主要分为三种实现方式:
1. 使用mysqlbinlog工具配合sed、awk,将binlog解析成类SQL文本,再用sed、awk转换为真正的SQL。
2. 对数据库源码打补丁,增加Flashback选项,扩展mysqlbinlog功能。pda安卓源码
3. 利用业界提供的解析binlog的库生成SQL,代表是binlog2sql。
这些工具在过滤选项上有限,如无法基于SQL类型过滤,需回滚delete语句时,还需结合awk、sed等工具筛选。理想的闪回工具需具备以下特性:
- **无需binlog文本转换**,直接操作binlog。杰哥传奇源码
- **提供丰富的过滤方式**,基于库、表、SQL类型、位置、时间等。
- **兼容多个MySQL版本**。
- **数据库重构不敏感**,方便升级。sqlite源码分析 jack
- **自主控制binlog解析**,灵活操作。
闪回工具的binlog格式基础
binlog文件结构由`format description event`开头,`rotate event`结尾,中间由多个事件组成。每个事件由事件头部和数据组成。
常见事件包括:
- `format description event`:描述binlog格式。
- `table map event`:定义表结构。
- `update row event`:表示数据更新。
binlog事件回滚
回滚逻辑基于事件类型:对于insert和delete操作,只需交换type_code即可完成回滚;对于update操作,难点在于计算AI、BI的长度,需要处理字段长度编码和decimal类型。
解析binlog关键点
- **长度编码整数**:通过一个或多个字节组合表示长度,有效节省存储空间。
- **decimal类型**:整数和小数每9个数字占4个字节,不足9个时,由剩余字节填充。
闪回工具架构解析
MyFlash工具通过以下步骤实现闪回功能:
1. **解析binlog**:将binlog文件解析为多个事件,用户可指定开始与结束位置,判断时间条件。
2. **重组事件**:将事件组成最小执行单元,包含表元数据和数据事件,用于保证执行逻辑正确。
3. **事件反转与重组**:反转最小执行单元中的数据事件,逆序最小执行单元队列。
4. **生成新binlog**:将逆序的最小执行单元输出为新binlog文件,注意修改next_position字段。
性能对比与测试
在特定场景下,测试MyFlash工具的性能,结果显示其速度最快,说明MyFlash在闪回操作中表现出色。
以上内容展示了闪回工具的现状、理想特性、binlog格式解析、事件回滚逻辑、解析关键点、工具架构解析、以及性能测试结果。
äºè®¡ç®ä¸ä¸è¯¾ç¨
å¦ä¹ 计ç®æºåºç¨ææ¯ï¼äºè®¡ç®ææ¯ï¼è¦å¦ä¹ ä»ä¹ä¸ä¸è¯¾è¿æè¦å¦ä¹ ä»ä¹æå课
软件å¼åï¼äºå¼åææ¯ï¼å¯ä»¥å°è¿è¾¹çç
ç°å¨å¦ä¹ äºè®¡ç®è¯¾ç¨é½éè¦å¦ä»ä¹å 容ï¼ä»¥åæ¾ä»ä¹å·¥ä½å
ä½ å¥½ï¼äºè®¡ç®æ¯æªæ¥äºèç½çåå±è¶å¿ï¼ç°å¨å ¥è¡äºè®¡ç®è¡ä¸ï¼å°±æå³çæªæ¥çé«èªåå©ï¼ä¸ºæ¤å¾å¤äººä¼éæ©åå ä¸ä¸çå¦ä¹ å¿«éå ¥è¡ãäºè®¡ç®æ¶µççç¥è¯ç¹å¾å¤ï¼åºç¨é¢åä¹æ¯è¾å¹¿æ³ï¼æ¯ä¸ä¸ªé常好çéæ©ãåªè¦ææ¡çæ£çæè½ï¼äºè®¡ç®å°±ä¸èªç¶ä¸æé®é¢ã
å¦æä½ æ³è¦ä¸ä¸çå¦ä¹ äºè®¡ç®ï¼æ´å¤éè¦çæ¯ä»åºæ¶é´åç²¾åï¼ä¸è¬å¨2Wå·¦å³ï¼4-6个ææ¶é´ä¸çãåéç课ç¨å¾ä¸éï¼ä½ å¯ä»¥æ ¹æ®èªå·±çå®é éæ±å»å®å°çä¸ä¸ï¼å 好好è¯å¬ä¹åï¼åéæ©éåèªå·±çãåªè¦åªåå¦å°çä¸è¥¿ï¼åéèªç¶ä¸ä¼å·®ã
大æ°æ®ä¸ä¸ä¸»è¦å¦ä»ä¹è¯¾ç¨
大æ°æ®ææ¯ä¸ä¸å±äºäº¤åå¦ç§ï¼ä»¥ç»è®¡å¦ãæ°å¦ã计ç®æºä¸ºä¸å¤§æ¯ææ§å¦ç§ï¼çç©ãå»å¦ãç¯å¢ç§å¦ãç»æµå¦ã社ä¼å¦ã管çå¦ä¸ºåºç¨æå±æ§å¦ç§ã
æ¤å¤è¿éå¦ä¹ æ°æ®ééãåæãå¤ç软件ï¼å¦ä¹ æ°å¦å»ºæ¨¡è½¯ä»¶å计ç®æºç¼ç¨è¯è¨çï¼ç¥è¯ç»ææ¯äºä¸å¤è½å¤åçè·¨ç人æ(æä¸ä¸ç¥è¯ãææ°æ®æç»´)ã
以ä¸å½äººæ°å¤§å¦ä¸ºä¾ï¼
åºç¡è¯¾ç¨ï¼æ°å¦åæãé«ç代æ°ãæ®éç©çæ°å¦ä¸ä¿¡æ¯ç§å¦æ¦è®ºãæ°æ®ç»æãæ°æ®ç§å¦å¯¼è®ºãç¨åºè®¾è®¡å¯¼è®ºãç¨åºè®¾è®¡å®è·µã
å¿ ä¿®è¯¾ï¼ç¦»æ£æ°å¦ãæ¦çä¸ç»è®¡ãç®æ³åæä¸è®¾è®¡ãæ°æ®è®¡ç®æºè½ãæ°æ®åºç³»ç»æ¦è®ºã计ç®æºç³»ç»åºç¡ã并è¡ä½ç³»ç»æä¸ç¼ç¨ãéç»æå大æ°æ®åæã
é修课ï¼æ°æ®ç§å¦ç®æ³å¯¼è®ºãæ°æ®ç§å¦ä¸é¢ãæ°æ®ç§å¦å®è·µãäºèç½å®ç¨å¼åææ¯ãæ½æ ·ææ¯ãç»è®¡å¦ä¹ ãåå½åæãéæºè¿ç¨ã
(3)äºè®¡ç®ä¸ä¸è¯¾ç¨æ©å±é 读ï¼
大æ°æ®å²ä½ï¼
1ã大æ°æ®ç³»ç»æ¶æå¸
大æ°æ®å¹³å°æ建ãç³»ç»è®¾è®¡ãåºç¡è®¾æ½ã
æè½ï¼è®¡ç®æºä½ç³»ç»æãç½ç»æ¶æãç¼ç¨èå¼ãæ件系ç»ãåå¸å¹¶è¡å¤ççã
2ã大æ°æ®ç³»ç»åæå¸
é¢åå®é è¡ä¸é¢åï¼å©ç¨å¤§æ°æ®ææ¯è¿è¡æ°æ®å®å ¨çå½å¨æ管çãåæååºç¨ã
æè½ï¼äººå·¥æºè½ãæºå¨å¦ä¹ ãæ°çç»è®¡ãç©éµè®¡ç®ãä¼åæ¹æ³ã
3ãhadoopå¼åå·¥ç¨å¸ã
解å³å¤§æ°æ®åå¨é®é¢ã
4ãæ°æ®åæå¸
ä¸åè¡ä¸ä¸ï¼ä¸é¨ä»äºè¡ä¸æ°æ®æéãæ´çãåæï¼å¹¶ä¾æ®æ°æ®ååºè¡ä¸ç 究ãè¯ä¼°åé¢æµçä¸ä¸äººåãå¨å·¥ä½ä¸éè¿è¿ç¨å·¥å ·ï¼æåãåæãåç°æ°æ®ï¼å®ç°æ°æ®çåä¸æä¹ã
5ãæ°æ®ææå·¥ç¨å¸
åæ°æ®ææè¦ä»æµ·éæ°æ®ä¸åç°è§å¾ï¼è¿å°±éè¦ä¸å®çæ°å¦ç¥è¯ï¼æåºæ¬çæ¯å¦çº¿æ§ä»£æ°ãé«ç代æ°ãå¸ä¼åãæ¦ç论çãç»å¸¸ä¼ç¨å°çè¯è¨å æ¬PythonãJavaãCæè C++ï¼æèªå·±ç¨Pythonæè Javaæ¯è¾å¤ãææ¶ç¨MapReceåç¨åºï¼åç¨Hadoopæè Hypæ¥å¤çæ°æ®ï¼å¦æç¨Pythonçè¯ä¼åSparkç¸ç»åã
Linuxäºè®¡ç®è¯¾ç¨å ·ä½å¦ä»ä¹
ä¼å°±ä¸linuxäºè®¡ç®å¹è®å¦é¢çåäºå¹å »å¤æ¹ä½åå±çäºè®¡ç®äººæï¼è¯¾ç¨è®¾ç½®ç§å¦åçï¼é¢å0åºç¡äººåï¼æå¦å 容涵çåå广æ³ï¼å¤§å项ç®å®è®ï¼å®ææ§æ´å¼ºã
ä¼å°±ä¸Linuxäºè®¡ç®çå¹è®è¯¾ç¨å 容ä¸è¬å为å 个é¶æ®µï¼ç¬¬ä¸é¶æ®µä¸»è¦å¦ä¹ ç½ç»åºç¡ï¼å æ¬è®¡ç®æºç½ç»(以太ç½ãTCP/IPç½ç»æ¨¡å)ãäºè®¡ç®ç½ç»(ç½ç»QoSã交æ¢æºä¸è·¯ç±å¨)ï¼é å¤æä¼ä¸çº§é¡¹ç®å®æï¼IPå°åé ç½®ä¸DNS解æã
第äºé¶æ®µå°å¦ä¹ Linuxåºç¡ï¼å æ¬Linuxæä½ç³»ç»(æ件æéãä½ä¸æ§å¶ä¸è¿ç¨ç®¡ç)以åLinuxé«çº§ç®¡ç(SedãAwkå·¥å ·ãæºç ç¼è¯)ãä¼ä¸çº§é¡¹ç®å®æ为ï¼äºæ°æ®ä¸å¿ä¸»æºCPUèµæºå©ç¨çå®æ¶ç»è®¡ãåæç³»ç»ã
第ä¸é¶æ®µå¦ä¹ Linuxè¿ç»´èªå¨åï¼ä¼ä¸çº§é¡¹ç®å®æ为Python+Shellå®ç°ä¼ä¸çº§FTPæ件ç»ä¸ç®¡çã
第åé¶æ®µæ¯æ°æ®åºè¿ç»´ç®¡ççå¦ä¹ ï¼ä¼ä¸çº§é¡¹ç®å®æï¼MySQL Galeraé«å¯ç¨é群ç¯å¢é¨ç½²ãå¼æ¥æ¶æ¯éåé群RabbitMQé¨ç½²ä¸è¿ç»´ã
第äºé¶æ®µçå¹è®å 容为ä¼ä¸çº§äºæ¶æ管çä¸ç»¼åå®æ(PaaS+TaaS)ï¼é¡¹ç®è®ç»çæ¯åºäºLAMPæ¶æå®ç°äºè®¡ç®PaaSå¹³å°å ¸ååºç¨é¨ç½²ä¸è¿ç»´ï¼éè¿Nginxå®ç°åä¸çº§å¹¶å访é®å¤çã
æåä¸ä¸ªé¶æ®µå°±æ¯å°±ä¸æ导ï¼ä»ç®åãé¢è¯æå·§çå±é¢å©å¦åæåï¼å¹å »å¦åæ²é表达è½åï¼è®©å¦åæ¸ æ°äºè§£èä¸åå±è§åï¼æç¡®èªèº«å®ä½ï¼æ¾å°éåèªèº«åå±çå·¥ä½ã
计ç®æºäºè®¡ç®æåªäºä¸»å¹²è¯¾ç¨
çµèç计ç®ä¸»è¦é è¿ç®å¨ã
è¿ç®å¨ï¼arithmetic unitï¼è®¡ç®æºä¸æ§è¡åç§ç®æ¯åé»è¾è¿ç®æä½çé¨ä»¶ãè¿ç®å¨çåºæ¬æä½å æ¬å ãåãä¹ãé¤ååè¿ç®ï¼ä¸ãæãéãå¼æçé»è¾æä½ï¼ä»¥å移ä½ãæ¯è¾åä¼ éçæä½ï¼äº¦ç§°ç®æ¯é»è¾é¨ä»¶ï¼ALUï¼ã
è¿ç®å¨ç±ç®æ¯é»è¾åå ï¼ALUï¼ãç´¯å å¨ãç¶æå¯åå¨ãéç¨å¯åå¨ç»çç»æãç®æ¯é»è¾è¿ç®åå ï¼ALUï¼çåºæ¬åè½ä¸ºå ãåãä¹ãé¤ååè¿ç®ï¼ä¸ãæãéãå¼æçé»è¾æä½ï¼ä»¥å移ä½ãæ±è¡¥çæä½ã计ç®æºè¿è¡æ¶ï¼è¿ç®å¨çæä½åæä½ç§ç±»ç±æ§å¶å¨å³å®ãè¿ç®å¨å¤ççæ°æ®æ¥èªåå¨å¨ï¼å¤çåçç»ææ°æ®é常éååå¨å¨ï¼æææ¶å¯åå¨è¿ç®å¨ä¸ãä¸Control Unitå ±åç»æäºCPUçæ ¸å¿é¨åã
è¿ç®å¨çå¤ç对象æ¯æ°æ®ï¼æ以æ°æ®é¿åº¦å计ç®æºæ°æ®è¡¨ç¤ºæ¹æ³ï¼å¯¹è¿ç®å¨çæ§è½å½±åæ大ã年代微å¤çå¨å¸¸ä»¥1个ã4个ã8个ã个äºè¿å¶ä½ä½ä¸ºå¤çæ°æ®çåºæ¬åä½ã大å¤æ°éç¨è®¡ç®æºå以ããä½ä½ä¸ºè¿ç®å¨å¤çæ°æ®çé¿åº¦ãè½å¯¹ä¸ä¸ªæ°æ®
è¿ç®å¨
çææä½åæ¶è¿è¡å¤ççè¿ç®å¨ç§°ä¸ºå¹¶è¡è¿ç®å¨ãå¦æä¸æ¬¡åªå¤çä¸ä½ï¼å称为串è¡è¿ç®å¨ãæçè¿ç®å¨ä¸æ¬¡å¯å¤çå ä½ ï¼é常为6æ8ä½ï¼ï¼ä¸ä¸ªå®æ´çæ°æ®åæè¥å¹²æ®µè¿è¡è®¡ç®ï¼ç§°ä¸ºä¸²/并è¡è¿ç®å¨ãè¿ç®å¨å¾å¾åªå¤çä¸ç§é¿åº¦çæ°æ®ãæçä¹è½å¤çå ç§ä¸åé¿åº¦çæ°æ®ï¼å¦ååé¿è¿ç®ãåååé¿è¿ç®ãåååé¿è¿ç®çãæçæ°æ®é¿åº¦å¯ä»¥å¨è¿ç®è¿ç¨ä¸æå®ï¼ç§°ä¸ºååé¿è¿ç®ã
æç §æ°æ®çä¸å表示æ¹æ³ï¼å¯ä»¥æäºè¿å¶è¿ç®å¨ãåè¿å¶è¿ç®å¨ãåå è¿å¶è¿ç®å¨ãå®ç¹æ´æ°è¿ç®å¨ãå®ç¹å°æ°è¿ç®å¨ãæµ®ç¹æ°è¿ç®å¨çãæç §æ°æ®çæ§è´¨ï¼æå°åè¿ç®å¨åå符è¿ç®å¨çã
å®ç主è¦åè½æ¯è¿è¡ç®æ¯è¿ç®åé»è¾è¿ç®ã
è¿ç®å¨è½æ§è¡å¤å°ç§æä½åæä½é度ï¼æ å¿çè¿ç®å¨è½åç强弱ï¼çè³æ å¿ç计ç®æºæ¬èº«çè½åãè¿ç®å¨æåºæ¬çæä½æ¯å æ³ãä¸ä¸ªæ°ä¸é¶ç¸å ï¼çäºç®åå°ä¼ éè¿ä¸ªæ°ãå°ä¸ä¸ªæ°ç代ç æ±è¡¥ï¼ä¸å¦ä¸ä¸ªæ°ç¸å ï¼ç¸å½äºä»åä¸ä¸ªæ°ä¸åå»åä¸ä¸ªæ°ãå°ä¸¤ä¸ªæ°ç¸åå¯ä»¥æ¯è¾å®ä»¬ç大å°ã
å·¦å³ç§»ä½æ¯è¿ç®å¨çåºæ¬æä½ãå¨æ符å·çæ°ä¸ï¼ç¬¦å·ä¸å¨èåªç§»æ°
è¿ç®å¨
æ®ä½ï¼ç§°ä¸ºç®æ¯ç§»ä½ãè¥æ°æ®è¿å符å·çææä½ä¸é½ç§»å¨ï¼ç§°ä¸ºé»è¾ç§»ä½ãè¥å°æ°æ®çæé«ä½ä¸æä½ä½é¾æ¥è¿è¡é»è¾ç§»ä½ï¼ç§°ä¸ºå¾ªç¯ç§»ä½ã
è¿ç®å¨çé»è¾æä½å¯å°ä¸¤ä¸ªæ°æ®æä½è¿è¡ä¸ãæãå¼æï¼ä»¥åå°ä¸ä¸ªæ°æ®çåä½æ±éãæçè¿ç®å¨è¿è½è¿è¡äºå¼ä»£ç çç§é»è¾æä½ã
ä¹ãé¤æ³æä½è¾ä¸ºå¤æãå¾å¤è®¡ç®æºçè¿ç®å¨è½ç´æ¥å®æè¿äºæä½ãä¹æ³æä½æ¯ä»¥å æ³æä½ä¸ºåºç¡çï¼ç±ä¹æ°çä¸ä½æå ä½è¯ç æ§å¶é次产çé¨å积ï¼é¨å积ç¸å å¾ä¹ç§¯ãé¤æ³åå常以ä¹æ³ä¸ºåºç¡ï¼å³éå®è¥å¹²å åä¹ä»¥é¤æ°ï¼ä½¿å®è¿ä¼¼ä¸º1ï¼è¿äºå åä¹è¢«é¤æ°åå¾åã没ææ§è¡ä¹æ³ãé¤æ³ç¡¬ä»¶ç计ç®æºå¯ç¨ç¨åºå®ç°ä¹ãé¤ï¼ä½éåº¦æ ¢å¾å¤ãæçè¿ç®å¨è¿è½æ§è¡å¨ä¸æ¹æ°ä¸å¯»æ±æ大æ°ï¼å¯¹ä¸æ¹æ°æ®è¿ç»æ§è¡åä¸ç§æä½ï¼æ±å¹³æ¹æ ¹çå¤ææä½ã
å¸ææè½å¸®å©ä½ 解çéæã
äºè®¡ç®éè¦å¦ä»ä¹è¯¾ç¨ææ¨èå
æ¨èä¸åéçäºè®¡ç®è¯¾ç¨ï¼å¦åéäºè®¡ç®æç¨åºæ¥çå¦åé½è¯´æ¾å·¥ä½å¾å®¹æã
äºè®¡ç®éä¿è§£éï¼äºè®¡ç®éè¦å¦ä»ä¹è¯¾ç¨
äºè®¡ç®éä¿ç讲ï¼äºç«¯æ¶è®¾ä¸å°æ§è½å¼ºå²çæå¡å¨ï¼æ¯å¦ï¼æ ¸çCPU ãG çå åï¼N个T çåå¨çãå¨è¿æ ·æçé ç½®å¾å¯ä½çæå¡å¨ä¸éè¿èææºææ¯ï¼å建å å个èææºï¼ä»å®¿ä¸»æå¡å¨ç¡¬ä»¶é ç½®ä¸åååºèµæºé é¢ï¼ï¼å®¢æ·æºéè¿âè¿ç¨æ¡é¢åè®®âæâè¿ç¨æ§å¶åè®®âè¿æ¥å°èææºï¼è¿æ ·ä½ å°±å¯ä»¥å¨æ¬å°å®¢æ·æºä½¿ç¨è¿å°è¿ç¨çèææºã æ以çè¿ç®(计ç®)é½æ¯å¨è¿å°èææºä¸å®æçï¼æ¬å°å®¢æ·æºåªæ¯è¾å ¥ä¸è¾åºï¼éæ¬å°è®¡ç®ï¼ãå¦ä¹ äºè®¡ç®å¯ä»¥å»ççopenstack ,å¤äºè§£KVM çã
äºè®¡ç®ä¸Hadoopç课ç¨å 容æ¯ä»ä¹
课ç¨ç®æ
çæåææ¡äºè®¡ç®çæ¶æä¸åç
äºè§£å¤§è§æ¨¡æ°æ®å¤ççæ ¸å¿ææ¯
çæ并ç解ä¼ä¸å¤§è§æ¨¡æ°æ®å¤çåºç¨ç注æäºé¡¹
对å¼æºç³»ç»Hadoopçè¡ä¸åºç¨
课ç¨å 容
Hadoop
ææ¯åå ¶åºç¨åºç¡
1天
Hadoop
管çå
2天
Hadoop
å¼åå
2天
Hive
å¼å管ç
1天
æ¥æºï¼åä¸æºè½åæ°æ®ä»åºç±å¥½è
æä¾ï¼åä¸æºè½åäºè®¡ç®ãããããéªè®ï¼ï¼ï¼ï¼ï¼å æ¬è¿ä¸ªè¯¾
äºè®¡ç®çåºç¡è¯¾ç¨
äºè®¡ç®æ¯ä¸å¥ç³»ç»ç解å³æ¹æ¡ãéè¦ä»å®è§çºµåå»çï¼åå°å¾®è§å ·ä½çæ个äºè®¡ç®çå项æä¸æ¯ãå®å±å为åºç¡æ¶æå±ï¼IaaSï¼ï¼å¹³å°æ¶æå±ï¼PaaSï¼ï¼è½¯ä»¶æ¶æå±ï¼SaaSï¼ï¼æå¡æ¶æå±ï¼BPaaSï¼ãæ¯ä¸ªå±é¢ç建设å®æ½è¿ç¨åå¯ä»¥ç¬ç«åå¨ï¼å¹¶æ²¡æå ååªåï¼å建åªåçå å顺åºãå ¶ä¸IaaSæ¯å¿ ç»ä¹è·¯ã纵åææ¡ä½äºï¼å横åç»åå»çãæ¯å¦ï¼IaaSå为åå¨æ± ï¼è´è½½åè¡¡æ± ï¼èç¹è®¡ç®æ± ï¼å ¶ä¸ååç»å为å°åæºè®¡ç®æ± ï¼æå¡å¨è®¡ç®æ± çãåææä½ç³»ç»çæ¬çä¸ååç»åï¼çã
äºè®¡ç®å¹è®éè¦å å¦ä»ä¹
é¶åºç¡å¦ä¹ linuxè½å¦ä¼å?
å æ¥è¯´ç»è®ºï¼é¶åºç¡å¦ä¹ Linuxæ¯å¯ä»¥å¦ä¼çï¼èä¸ç°å¨å¹è®æºæç课ç¨é½æ¯é¶åºç¡éå¦çï¼åæé½æåºç¡ç¥è¯çå¦ä¹ ï¼é计ç®æºä¸ä¸ãé¶åºç¡å°ç½é½æ¯å¯ä»¥ä»å¤´å¼å§å¦ä¹ çã
èä¸å¨æ¯ä¸ªé¶æ®µé½æé¶æ®µæ£æµï¼æ¥æ¼è¡¥ç¼ºï¼èæ ¸å¦åçå¦ä¹ ç»æï¼ä¸åæ ¼ä¸è¿å ³çè¿è¦åå¦ä¹ ï¼ç´å°åæ ¼è¿å ³ã
éè¦å åå¤åªäºåºç¡ç¥è¯å?
Linuxéè¦åå¤çåºç¡ç¥è¯é¦å æ¯ç½ç»åºç¡ï¼å æ¬è®¡ç®æºç½ç»(以太ç½ãTCP/IPç½ç»æ¨¡å)ãäºè®¡ç®ç½ç»(ç½ç»QoSã交æ¢æºä¸è·¯ç±å¨)ï¼è¦å¦ä¹ å°ç½ç»åºæ¬æ¦å¿µåçãç½ç»çååæ¹å¼ï¼äºè§£æ°æ®ä¸å¿ç¡¬ä»¶è®¾æ½ï¼æ°æ®éä¿¡åºæ¬åçï¼ä»¥å¤ªç½åºç¡åç°æéä¿¡ç½ç»ä¼ è¾è§èãåç»çº¿ãIPå°ååºæ¬ææãåç±»;å°å解æä¸ååæ¹æ³;è½å¤ç¬ç«é ç½®IP并è¿è¡åå解æçåºç¡æä½ççç¸å ³ç¥è¯ã
linuxäºè®¡ç®è¯¾ç¨çåäºå¹å »å¤æ¹ä½åå±çäºè®¡ç®äººæï¼è¯¾ç¨è®¾ç½®ç§å¦åçï¼é¢å0åºç¡äººåï¼æå¦å 容涵çåå广æ³ï¼å¤§å项ç®å®è®ï¼å®ææ§æ´å¼ºã 讲å¸å ¨ç¨é¢æï¼ä¸¥ç®¡å¦ä¹ ï¼å°±ä¸æå¡è´¯ç©¿å§ç»ï¼æ¨èå°±ä¸ã欢è¿åä½å°ä¼ä¼´åæ¥è¯å¬ã
linux awkå½ä»¤
ä¸ãawkæ¯ä¸ä¸ªå¼ºå¤§çææ¬åæå·¥å ·ï¼ç¸å¯¹äºgrepçæ¥æ¾ï¼sedçç¼è¾ï¼awkå¨å ¶å¯¹æ°æ®åæ并çææ¥åæ¶ï¼æ¾å¾å°¤ä¸ºå¼ºå¤§ãç®åæ¥è¯´awkå°±æ¯ææ件éè¡çè¯»å ¥ï¼ä»¥ç©ºæ ¼ä¸ºé»è®¤åé符å°æ¯è¡åçï¼åå¼çé¨ååè¿è¡åç§åæå¤çãäº. awkå½ä»¤æ ¼å¼åé项
2.1 awkçè¯æ³æ两ç§å½¢å¼
1. å½ä»¤è¡æ¹å¼
awk [-F field-separator] 'commands' input-file(s)
å ¶ä¸ï¼commandsæ¯çæ£awkå½ä»¤ï¼[-Fååé符]æ¯å¯éçãinput-file(s)æ¯å¾ å¤ççæ件ã
å¨awkä¸ï¼æ件çæ¯ä¸è¡ä¸ï¼ç±ååé符åå¼çæ¯ä¸é¡¹ç§°ä¸ºä¸ä¸ªåãé常ï¼å¨ä¸æå-Fååé符çæ åµä¸ï¼é»è®¤çååé符æ¯ç©ºæ ¼ã
2. å°ææçawkå½ä»¤æå ¥ä¸ä¸ªåç¬æ件ï¼ç¶åè°ç¨:
awk -f awk-script-file input-file(s)
å ¶ä¸ï¼-fé项å è½½awk-script-fileä¸çawkèæ¬ï¼input-file(s)è·ä¸é¢çæ¯ä¸æ ·çã
2.2 å½ä»¤é项
ï¼1ï¼-F fs or --field-separator fs ï¼æå®è¾å ¥æ件æåé符ï¼fsæ¯ä¸ä¸ªå符串æè æ¯ä¸ä¸ªæ£å表达å¼ï¼å¦-F:ã
ï¼2ï¼-v var=value or --asign var=value ï¼èµå¼ä¸ä¸ªç¨æ·å®ä¹åéã
ï¼3ï¼-f scripfile or --file scriptfile ï¼ä»èæ¬æ件ä¸è¯»åawkå½ä»¤ã
ï¼4ï¼-mf nnn and -mr nnn ï¼å¯¹nnnå¼è®¾ç½®å å¨éå¶ï¼-mfé项éå¶åé ç»nnnçæ大åæ°ç®ï¼-mré项éå¶è®°å½çæ大æ°ç®ãè¿ä¸¤ä¸ªåè½æ¯Bellå®éªå®¤çawkçæ©å±åè½ï¼å¨æ åawkä¸ä¸éç¨ã
ï¼5ï¼-W compact or --compat, -W traditional or --traditional ï¼å¨å ¼å®¹æ¨¡å¼ä¸è¿è¡awkãæ以gawkçè¡ä¸ºåæ åçawkå®å ¨ä¸æ ·ï¼ææçawkæ©å±é½è¢«å¿½ç¥ã
ï¼6ï¼-W copyleft or --copyleft, -W copyright or --copyright ï¼æå°ç®çççæä¿¡æ¯ã
ï¼7ï¼-W help or --help, -W usage or --usage ï¼æå°å ¨é¨awké项åæ¯ä¸ªé项çç®ç说æã
ï¼8ï¼-W lint or --lint ï¼æå°ä¸è½åä¼ ç»unixå¹³å°ç§»æ¤çç»æçè¦åã
ï¼9ï¼-W lint-old or --lint-old ï¼æå°å ³äºä¸è½åä¼ ç»unixå¹³å°ç§»æ¤çç»æçè¦åã
ï¼ï¼-W posix ï¼æå¼å ¼å®¹æ¨¡å¼ãä½æ以ä¸éå¶ï¼ä¸è¯å«ï¼/xãå½æ°å ³é®åãfuncãæ¢ç åºå以åå½fsæ¯ä¸ä¸ªç©ºæ ¼æ¶ï¼å°æ°è¡ä½ä¸ºä¸ä¸ªååé符ï¼æä½ç¬¦**å**=ä¸è½ä»£æ¿^å^=ï¼fflushæ æã
ï¼ï¼-W re-interval or --re-inerval ï¼å 许é´éæ£å表达å¼ç使ç¨ï¼åè(grepä¸çPosixå符类)ï¼å¦æ¬å·è¡¨è¾¾å¼[[:alpha:]]ã
ï¼ï¼-W source program-text or --source program-text ï¼ä½¿ç¨program-textä½ä¸ºæºä»£ç ï¼å¯ä¸-få½ä»¤æ··ç¨ã
ï¼ï¼-W version or --version ï¼æå°bugæ¥åä¿¡æ¯ççæ¬ã
ä¸. 使ç¨æ¹æ³
#awk '{ pattern + action}' { filenames}
尽管æä½å¯è½ä¼å¾å¤æï¼ä½è¯æ³æ»æ¯è¿æ ·ï¼å ¶ä¸ pattern 表示 AWK å¨æ°æ®ä¸æ¥æ¾çå 容ï¼è action æ¯å¨æ¾å°å¹é å 容æ¶ææ§è¡çä¸ç³»åå½ä»¤ãè±æ¬å·ï¼{ }ï¼ä¸éè¦å¨ç¨åºä¸å§ç»åºç°ï¼ä½å®ä»¬ç¨äºæ ¹æ®ç¹å®ç模å¼å¯¹ä¸ç³»åæ令è¿è¡åç»ã patternå°±æ¯è¦è¡¨ç¤ºçæ£å表达å¼ï¼ç¨ææ æ¬èµ·æ¥ã
awkè¯è¨çæåºæ¬åè½æ¯å¨æ件æè å符串ä¸åºäºæå®è§åæµè§åæ½åä¿¡æ¯ï¼awkæ½åä¿¡æ¯åï¼æè½è¿è¡å ¶ä»ææ¬æä½ãå®æ´çawkèæ¬é常ç¨æ¥æ ¼å¼åææ¬æ件ä¸çä¿¡æ¯ã
é常ï¼awkæ¯ä»¥æ件çä¸è¡ä¸ºå¤çåä½çãawkæ¯æ¥æ¶æ件çä¸è¡ï¼ç¶åæ§è¡ç¸åºçå½ä»¤ï¼æ¥å¤çææ¬ã
å. 模å¼åæä½
awkèæ¬æ¯ç±æ¨¡å¼åæä½ç»æçï¼
pattern { action} å¦$ awk '/root/' testï¼æ$ awk '$3 < ' testã
两è æ¯å¯éçï¼å¦æ没æ模å¼ï¼åactionåºç¨å°å ¨é¨è®°å½ï¼å¦æ没æactionï¼åè¾åºå¹é å ¨é¨è®°å½ãé»è®¤æ åµä¸ï¼æ¯ä¸ä¸ªè¾å ¥è¡é½æ¯ä¸æ¡è®°å½ï¼ä½ç¨æ·å¯éè¿RSåéæå®ä¸åçåé符è¿è¡åéã
4.1. 模å¼
模å¼å¯ä»¥æ¯ä»¥ä¸ä»»æä¸ä¸ªï¼
ï¼1ï¼æ£å表达å¼ï¼ä½¿ç¨éé 符çæ©å±éã
ï¼2ï¼å ³ç³»è¡¨è¾¾å¼ï¼å¯ä»¥ç¨ä¸é¢è¿ç®ç¬¦è¡¨ä¸çå ³ç³»è¿ç®ç¬¦è¿è¡æä½ï¼å¯ä»¥æ¯å符ï¼3ï¼ä¸²ææ°åçæ¯è¾ï¼å¦$2>%1éæ©ç¬¬äºä¸ªå段æ¯ç¬¬ä¸ä¸ªå段é¿çè¡ã
ï¼4ï¼æ¨¡å¼å¹é 表达å¼ï¼ç¨è¿ç®ç¬¦~(å¹é )å~!(ä¸å¹é )ã
ï¼5ï¼æ¨¡å¼ï¼æ¨¡å¼ï¼æå®ä¸ä¸ªè¡çèå´ã该è¯æ³ä¸è½å æ¬BEGINåEND模å¼ã
ï¼6ï¼BEGINï¼è®©ç¨æ·æå®å¨ç¬¬ä¸æ¡è¾å ¥è®°å½è¢«å¤çä¹åæåççå¨ä½ï¼é常å¯å¨è¿éè®¾ç½®å ¨å±åéã
ï¼7ï¼ENDï¼è®©ç¨æ·å¨æåä¸æ¡è¾å ¥è®°å½è¢«è¯»åä¹ååççå¨ä½ã
4.2. æä½
æä½ç±ä¸äººæå¤ä¸ªå½ä»¤ãå½æ°ã表达å¼ç»æï¼ä¹é´ç±æ¢è¡ç¬¦æåå·éå¼ï¼å¹¶ä½äºå¤§æ¬å·å ã主è¦æåé¨ä»½ï¼
ï¼1ï¼åéææ°ç»èµå¼
ï¼2ï¼è¾åºå½ä»¤
ï¼3ï¼å ç½®å½æ°
ï¼4ï¼æ§å¶æµå½ä»¤
äº. awkçç¯å¢åé
å . awkè¿ç®ç¬¦
ä¸. è®°å½åå
7.1. è®°å½
awkææ¯ä¸ä¸ªä»¥æ¢è¡ç¬¦ç»æçè¡ç§°ä¸ºä¸ä¸ªè®°å½ã
è®°å½åé符ï¼é»è®¤çè¾å ¥åè¾åºçåé符é½æ¯å车ï¼ä¿åå¨å 建åéORSåRSä¸ã
$0åéï¼å®æçæ¯æ´æ¡è®°å½ãå¦$ awk '{ print $0}' testå°è¾åºtestæ件ä¸çææè®°å½ã
åéNRï¼ä¸ä¸ªè®¡æ°å¨ï¼æ¯å¤çå®ä¸æ¡è®°å½ï¼NRçå¼å°±å¢å 1ã
å¦$ awk '{ print NR,$0}' testå°è¾åºtestæ件ä¸ææè®°å½ï¼å¹¶å¨è®°å½åæ¾ç¤ºè®°å½å·ã
7.2. å
è®°å½ä¸æ¯ä¸ªåè¯ç§°åâåâï¼é»è®¤æ åµä¸ä»¥ç©ºæ ¼ætabåéãawkå¯è·è¸ªåç个æ°ï¼å¹¶å¨å 建åéNFä¸ä¿å该å¼ãå¦$ awk '{ print $1,$3}' testå°æå°testæ件ä¸ç¬¬ä¸å第ä¸ä¸ªä»¥ç©ºæ ¼åå¼çå(å)ã
7.3. ååé符
å 建åéFSä¿åè¾å ¥ååé符çå¼ï¼é»è®¤æ¯ç©ºæ ¼ætabãæ们å¯ä»¥éè¿-Få½ä»¤è¡é项修æ¹FSçå¼ãå¦$ awk -F: '{ print $1,$5}' testå°æå°ä»¥åå·ä¸ºåé符ç第ä¸ï¼ç¬¬äºåçå 容ã
å¯ä»¥åæ¶ä½¿ç¨å¤ä¸ªååé符ï¼è¿æ¶åºè¯¥æåé符åææ¾å°æ¹æ¬å·ä¸ï¼å¦$awk -F'[:/t]' '{ print $1,$3}' testï¼è¡¨ç¤ºä»¥ç©ºæ ¼ãåå·åtabä½ä¸ºåé符ã
è¾åºåçåé符é»è®¤æ¯ä¸ä¸ªç©ºæ ¼ï¼ä¿åå¨OFSä¸ãå¦$ awk -F: '{ print $1,$5}' testï¼$1å$5é´çéå·å°±æ¯OFSçå¼ã
å «. å¹é æä½ç¬¦(~)
ç¨æ¥å¨è®°å½æè åå å¹é æ£å表达å¼ãå¦$ awk '$1 ~/^root/' testå°æ¾ç¤ºtestæ件第ä¸åä¸ä»¥rootå¼å¤´çè¡ã
ä¹. æ¯è¾è¡¨è¾¾å¼
conditional expression1 ? expression2: expression3ï¼
ä¾å¦ï¼
$ awk '{ max = { $1 > $3} ? $1: $3: print max}' testãå¦æ第ä¸ä¸ªå大äºç¬¬ä¸ä¸ªåï¼$1å°±èµå¼ç»maxï¼å¦å$3å°±èµå¼ç»maxã
$ awk '$1 + $2 < ' testãå¦æ第ä¸å第äºä¸ªåç¸å 大äºï¼åæå°è¿äºè¡ã
$ awk '$1 > 5 && $2 < ' test,å¦æ第ä¸ä¸ªå大äº5ï¼å¹¶ä¸ç¬¬äºä¸ªåå°äºï¼åæå°è¿äºè¡ã
å. èå´æ¨¡æ¿
èå´æ¨¡æ¿å¹é ä»ç¬¬ä¸ä¸ªæ¨¡æ¿ç第ä¸æ¬¡åºç°å°ç¬¬äºä¸ªæ¨¡æ¿ç第ä¸æ¬¡åºç°ä¹é´ææè¡ãå¦ææä¸ä¸ªæ¨¡æ¿æ²¡åºç°ï¼åå¹é å°å¼å¤´ææ«å°¾ãå¦$ awk '/root/,/mysql/' testå°æ¾ç¤ºroot第ä¸æ¬¡åºç°å°mysql第ä¸æ¬¡åºç°ä¹é´çææè¡ã