awkg是一个类似awk的文本处理工具,由python语言提供支持

awkg的Python项目详细描述


awkg

awkg是使用现代python语言的类似于awk的实用程序。 awk非常简单、快速而且非常方便。但是,它的领域特定约束 有时会妨碍我们。awkg遵循awk设计的步骤(包括它对名称的约定) 展示了现代Python的全部力量。 Python的一大堆现成的现有图书馆当然可以被导入和使用。

安装

# Install from pypy 
$ pip install awkg

# Install from github
$ pip install git+https://github.com/thammegowda/awkg.git

cli用法:

$ awkg -h 
usage: awkg [-h] [-i INP] [-o OUT] [-F FS] [-OFS OFS] [-ORS ORS]
            [-b BEGIN_SCRIPT] [-e END_SCRIPT] [-im IMPORTS] [-it INIT_PATH]
            [-v]
            inline_script

awkg is an awk-like text-processing tool powered by python language

positional arguments:
  inline_script         Inline python script

optional arguments:
  -h, --help            show this help message and exit
  -i INP, --inp INP     Input file path; None=STDIN
  -o OUT, --out OUT     Output file path; None=STDOUT
  -F FS, -FS FS, --field-sep FS
                        the input field separator. Default=None implies white
                        space
  -OFS OFS, --out-field-sep OFS
                        the out field separator. Default=None implies same as
                        input FS.
  -ORS ORS, --out-rec-sep ORS
                        the output record separator. Default=None implies same
                        as input RS.
  -b BEGIN_SCRIPT, --begin BEGIN_SCRIPT
                        BEGIN block. initialize variables or whatever
  -e END_SCRIPT, --end END_SCRIPT
                        END block. Print summaries or whatever
  -im IMPORTS, --import IMPORTS
                        Imports block. Specify a list of module names to be
                        imported.Semicolon (;) is the delimiter. Ex:
                        json;numpy as np
  -it INIT_PATH, --init INIT_PATH
                        The rc file that initializes environment.Default is
                        $HOME/.awkg.py
  -v, --version         show program's version number and exit

示例

计算每个序列中单词的平均值和标准差

cat data/train.src | awkg -b 'arr=[]; import numpy as np''arr.append(NF)'\
   -e 'arr=np.array(arr); print(f"{NR} lines from {FNAME}, mean={arr.mean():.2f}; std={arr.std():.4f}")'

过滤记录

# use print() explicitely 
cat data/train.src  | awkg  'if NF >= 25: print(*R)' 

Assign boolean expression to special variable RET to trigger implicit print 
cat data/train.src  | awkg  'RET = NF >= 25'

# print respects the OFS value
cat data/train.src  |  awkg  'if NF >= 25: print(NR, NF)' -OFS='\t'

特殊变量

  • NF:字段数
  • NR:记录号
  • R:具有当前记录的所有列的数组。
  • R0:类似于$0,它在拆分成R之前存储输入行,因为python是 不允许$在标识符中,它被重命名为R0
  • RET:当此变量设置为true隐式print(*R)的真值时,将触发
  • FS:输入字段分隔符
  • OFS:输出字段分隔符;除非显式设置,OFS=FS
  • ORS:输出记录分隔符
  • RS(当前未使用)
  • _locals_globals-本地和全局范围内的所有变量

除了上述变量之外,您还可以使用任何有效的python标识符

默认导入模块

默认情况下,这些模块是导入的

  • sys
  • os
  • re
  • from pathlib import Path

作者:

相关工具

  • pawk与此存储库类似,实现略有不同。
  • gawkgnu awk

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java应该考虑使用DTO来代替Spring控制器层吗?   java为什么要将Maven与Git结合起来?   java试图将CSV转换为XLSX,但使用了错误的逗号拆分列   mysql Spring 3+Hibernate:java。sql。BatchUpdateException:无法添加或更新子行(ManyToMany)   java基本字符串反转器   java无法使用RestControllerAdvice为身份验证失败生成自定义错误消息   java当只允许SQLException时,如何抛出EOFEException?   java如何创建播放模块?   Android中匿名类的java实例化异常问题   java两个停靠组件,其中第二个组件填充剩余空间   java如何在按钮延迟时启用它   Java中正在运行的应用程序中的后台进程   java我正试图从一个字符串打印出这个字符输出   如何使用java socket通过两个不同的wifi连接两台电脑?   javaapachecamel:如何将分层数据从数据库转换为pojo   java Webrtc:OniconConnectionChange和onConnectionChange之间有什么区别   java如何重写已经创建的JTable方法   爪哇扫雷机堆垛机   雅加达ee Java ee EJB 3.0 Glassfish