返回顶部
首页 > 资讯 > 后端开发 > Python >python实现类似awk的简单功能
  • 901
分享到

python实现类似awk的简单功能

类似简单功能 2023-01-31 07:01:37 901人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

命令行的awk很方便,但处理灵活一点的话对awk不熟,深入学习又没太大必要,用python做个简单的,复杂的话也用Python脚本实现,程序的一致性更好。 #!/usr/bin/python #coding:utf-8 import

命令行的awk很方便,但处理灵活一点的话对awk不熟,深入学习又没太大必要,用python做个简单的,复杂的话也用Python脚本实现,程序的一致性更好。

#!/usr/bin/python
#coding:utf-8

import os
import sys
from getopt import getopt

#处理协程
def deallines(dealer,instream,paras):
    sep = paras.get("sep","\t")
    for line in instream:
        fields = line.strip("\r\n").split(sep)
        for result in dealer(line,fields) or ():
            if type(result) == str:
                yield result
            elif type(result) == int:
                yield str(result)+"\n"
            else:
                yield sep.join([str(f) for f in result])+"\n"

#定义处理函数
dealerid = 0
def definedealer(dealstr,paras):
    global dealerid
    dealerid += 1
    funcname = "dealer_"+str(dealerid)
    exec "def "+funcname+"(line,f): "+dealstr
    return vars()[funcname]

#打印结果
def printer(instream):
    for line in instream:
        print line,

#处理字符转义
def convertchar(s):
    if s == "\\t":
        return "\t"
    elif s == "\\r":
        return "\r"
    elif s == "\\n":
        return "\n"
    elif s == "\\\\":
        return "\\"
    elif s == "\\'":
        return "\'"
    elif s == '\\"':
        return '\"'
    elif s == "\\a":
        return "\a"
    elif s == "\\b":
        return "\b"
    elif s == "\\e":
        return "\e"
    elif s == "\\v":
        return "\v"
    elif s == "\\f":
        return "\f"
    elif len(s) == 4 and s.startswith("\\x"):
        return chr(eval('0x'+s[2:4]))
    else:
        return s

#转换参数
def convertparas(paras):
    result = {"sep":"\t"}
    for key,value in paras:
        if key == '-F':
            result["sep"] = convertchar(value)
    return result
<pre name="code" class="python"><pre name="code" class="python">

FNR = 0def record(instream): global FNR for r in instream: FNR += 1 yield r
#主函数def main(args): paras,deals = getopt(args[1:],'F:') paras = convertparas(paras) dealers = [definedealer(dealstr,paras) for dealstr in deals] stream = record(sys.stdin) for dealer in dealers: stream = deallines(dealer,stream,paras) printer(stream)if __name__
 =='__main__': main(sys.argv)

#输入数据,姓名 年龄 身高 体重

cat person.txt
zs      10      1.3     35.0

ls      12      1.4     36.0

#print直接输出

cat person.txt | dealline 'print line,'

zs      10      1.3     35.0

ls      12      1.4     36.0

#分两步,第一步提取姓名 身高 体重,第二步计算体重指数=体重/身高/身高

cat person.txt | dealline 'yield f[0],f[2],f[3]' 'yield f[0],float(f[2])/float(f[1])/float(f[1])'
zs      20.7100591716
ls      18.3673469388

注:-F分隔符缺省为\t,line为整行,f为按分隔符split后的数组,FNR为记录号

--结束END--

本文标题: python实现类似awk的简单功能

本文链接: https://lsjlt.com/news/191573.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python实现类似awk的简单功能
    命令行的awk很方便,但处理灵活一点的话对awk不熟,深入学习又没太大必要,用python做个简单的,复杂的话也用python脚本实现,程序的一致性更好。 #!/usr/bin/python #coding:utf-8 import ...
    99+
    2023-01-31
    类似 简单 功能
  • python实现简单聊天功能
    python的功能确实强大,几行代码就能实现聊天功能 ,供大家参考,具体内容如下 服务端: from socket import socket def main(): #创建套接字对象并指定使用哪种传...
    99+
    2022-06-02
    python 聊天
  • 简单实现python爬虫功能
    在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。   我们最常规的做法就是通过鼠标右键,选择另存为。但有些图...
    99+
    2022-06-04
    爬虫 简单 功能
  • HTML怎么实现类似include功能
    在HTML中,没有内置的include功能,但可以使用JavaScript来实现类似的功能。一种方法是使用jQuery库中的load...
    99+
    2023-08-19
    HTML
  • Python简单实现enum功能的方法
    本文实例讲述了Python简单实现enum功能的方法。分享给大家供大家参考,具体如下: class Enumerate(object): def __init__(self,names): ...
    99+
    2022-06-04
    简单 功能 方法
  • python实现简单的计算器功能
    本文实例为大家分享了python实现简单计算器的具体代码,供大家参考,具体内容如下 今天学习到python中界面设计部分,常用的几种图形化界面库有:Jython、wxPython和t...
    99+
    2024-04-02
  • python实现简单倒计时功能
    使用python实现简单倒计时exe,供大家参考,具体内容如下 使用tkinter制作界面实现倒计时功能。 使用time.sleep(1)实现 秒级 倒计时 使用...
    99+
    2024-04-02
  • HTML中如何实现类似include功能
    在HTML中,可以使用JavaScript实现类似include的功能。具体步骤如下:1. 创建一个用于加载外部HTML文件的Jav...
    99+
    2023-08-18
    HTML
  • mysql中类似oracle的over() row_number()的功能实现
    从网上找了很多资料,参考了如下链接,完成了一个需求:下一行的开始时间,作为上一行开始时间的结束时间。 https://www.cnblogs.com/yhzh/p/6222580.html 以下是自己做的...
    99+
    2024-04-02
  • python实现简单爬虫功能的示例
    在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。 我们最常规的做法就是通过鼠标右键,选择另存为。但有些图片鼠标右键的时候...
    99+
    2022-06-04
    爬虫 示例 简单
  • three.js简单实现类似七圣召唤的掷骰子
    目录1基本工作1.1 创建场景1.2 创建物理世界2 骰子2.1 骰子模型2.2 骰子物理2.3 判断骰子的顶面方案一方案二具体实现2.4 锁定骰子结1基本工作 笔者利用业余时间自...
    99+
    2023-01-17
    three.js七圣召唤掷骰子 three.js实现掷骰子
  • PostgreSQL如何实现类似CURRENT_DATE函数的功能
    小编给大家分享一下PostgreSQL如何实现类似CURRENT_DATE函数的功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧...
    99+
    2024-04-02
  • PowerShell实现简单的grep功能
    在PowerShell中,无法像*nix中一样使用grep命令,直接对一个目录下的所有文件进行内容查找,下面的PS脚本针对目录和文件进行了区分,借用Select-String命令,实现了内容查找,并显示查找...
    99+
    2022-06-04
    简单 功能 PowerShell
  • Python实现的简单dns查询功能示例
    本文实例讲述了Python实现的简单dns查询功能。分享给大家供大家参考,具体如下: #!/usr/bin/python import sys,socket def print_array(*arr):...
    99+
    2022-06-04
    示例 查询功能 简单
  • Python+Tkinter简单实现注册登录功能
    本文实例为大家分享了Python+Tkinter简单实现注册登录功能的具体代码,供大家参考,具体内容如下 项目结构: 源代码: # -*- coding: utf-8 -*...
    99+
    2024-04-02
  • 使用python实现简单去水印功能
    在做视频或者图片处理的时候,我们经常会遇到存在水印的情况,或者我们需要去除图片的某一个部分,这时候我们就需要想办法去除不需要的这一部分。下面这个工具能够控制鼠标将图片上的任意部分改变...
    99+
    2024-04-02
  • python如何实现简单倒计时功能
    这篇文章给大家分享的是有关python如何实现简单倒计时功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是搞明...
    99+
    2023-06-14
  • 怎么用python实现简单聊天功能
    本篇内容主要讲解“怎么用python实现简单聊天功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用python实现简单聊天功能”吧!服务端:from socket im...
    99+
    2023-06-20
  • MySQL中怎么实现rownum功能类似的语句
    本篇内容主要讲解“MySQL中怎么实现rownum功能类似的语句”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL中怎么实现rownum功能类似的语句”吧...
    99+
    2024-04-02
  • react实现简单的拖拽功能
    本文实例为大家分享了react实现简单的拖拽功能的具体代码,供大家参考,具体内容如下 src文件夹下新建文件夹demo  然后在创建两个文件js和css demo.js文...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作