awk学习笔记1-常用awk操作

news2024/12/23 16:51:37

(一)awk简介


        linux 三剑客之awk,AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。grep,sed和awk都是读一行处理一行,直到处理完成。

grep : 过滤文本
sed  :  修改文本
awk  :  处理文本(主要用来格式化,将文本按照指定的格式输出)

(二)awk语法

常见的三种形式
awk [选项] '[pattern] action' 处理对象

标准输出 | awk [选项] '[pattern] action'

awk [选项] 'BEGIN{ commands } /pattern/ { commands } END{ commands }' 处理对象

        1.常用选项    

-F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-v var=value or --asign var=value
赋值一个用户定义变量。
-f scripfile or --file scriptfile
从脚本文件中读取awk命令

        2.常用pattern  

这是一个正则表达式,用于匹配文件中的行 //
    ^匹配行首
    $匹配行尾
    .匹配任意1个字符
    *匹配前面的字符出现0次或多次
    +匹配前面的字符出现1次或多次
    ?匹配前面的字符出现0次或1次
    []匹配方括号中任意一个字符
    [^]匹配不在方括号中的任意一个字符


        3.常用action

这是一个命令序列,对常见的行进行处理
    print 打印匹配的行或者指定的字段
    printf 格式化输出 注意这个不换行的哦
                    printf    : 格式化打印
                    %s        : 字符串
                    %d        : 数字
                    -        : 左对齐
                    +        : 右对齐
                    15        : 至少占用15字符
    if-else 条件判断
    for 循环处理
    while 循环处理
    getline 从文件中处理一行
    next 跳过当前行
    exit 结束awk命令


        4.处理对象


        这个就是我们要处理的文本,没啥特别的

        5.awk语句中的BEGIN和END

        awk中可以有多个pattern{action},只需要直接连用即可,这里的BEGIN和END就是pattern的一种特殊形式,BEGIN携带的action是在开始处理文本数据之前先要执行的,而END携带的action则是在处理文本数据结束后才执行的。

(三)awk内置变量

NF     当前行的字段数量
NR     当前行的行号,从1开始
FNR    各文件分别计数的行号,输入多个文件时,NR越来越大,FNR在换到另一个文件里就从1开始了,很好理解吧
$0     完整的输入记录,也就是当前行的全部内容
$n     当前记录的第n个字段,字段间由FS分隔
FS     字段分隔符(默认是任何空格)
RS     记录分隔符(默认是一个换行符)
OFS    输出字段分隔符,默认值与输入字段分隔符一致。
ORS    输出记录分隔符(默认值是一个换行符)
FILENAME      当前文件名
IGNORECASE    如果为真,则进行忽略大小写的匹配


(四)awk执行流程

BEGIN{}    : 最开始执行

 //                : 正则
{}                : 循环体
END{}        : 最后执行


这里面最少有一个,最多有四个
        1、通过关键字 BEGIN 执行 BEGIN 块的内容,即 BEGIN 后花括号 {} 的内容。
        2、完成 BEGIN 块的执行,开始执行body块。
        3、读入有 \n 换行符分割的记录。
        4、将记录按指定的域分隔符划分域,填充域,$0 则表示所有域(即一行内容),$1 表示第一个域,$n 表示第 n 个域。
        5、依次执行各 BODY 块,pattern 部分匹配该行内容成功后,才会执行 awk-commands 的内容。
        6、循环读取并执行各行直到文件结束,完成body块执行。
        7、开始 END 块执行,END 块可以输出最终结果。

(五)常用操作


        1.截取文档中的某个段

-- F指定域分割符号,输出第一列和第二列
cat /etc/passwd |awk -F ':' '{print $1,$2}'


        2.匹配字符或者字符串

--print也可以不用直接用,默认输出行
cat /etc/passwd |awk '/bash/'
-- 只匹配有/bin/bash的行的用户,nologin的用户不显示
cat /etc/passwd |awk -F ':' '/\/bin\/bash/ {print $1}'
-- 匹配以n结尾,包含ftp文本的用户, 打印的是后可以用双引号打印自己想要的数
cat /etc/passwd |awk -F ':' '/.*ftp.*n$/ {print "用户:" $1}'


        3.条件操作符

        运算符    描述

                ~        : 使用正则匹配
                !~        : 不匹配正则匹配

                ||    逻辑或
                &&    逻辑与
                < <= > >= != ==    关系运算符
                空格    连接
                + -    加,减
                * / %    乘,除与求余
                + - !    一元加,减和逻辑非
                $    字段引用
awk中同时提供了print和printf两种打印输出的函数。

其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。

printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂

--匹配uid>1000的用户全部信息
cat /etc/passwd |awk -F ':' '$3>=1000'
--匹配test开头,输出当前文件名,行号,uid+1000
awk -F ':' '/^test/ {print FILENAME,NR,$3+1000}' /etc/passwd
--使用正则表达式,正则表达式匹配test  
-- ~ 表示模式开始。// 里面是模式。 !~表示模式取反
awk -F ':' '$1 ~ /test/ {print $1}' /etc/passwd


        4.设置变量

-- 输出test用户 组名+2000
awk -F ':' -va=2000 '/^test/ {print $1,$3+a}' /etc/passwd


        5.忽略大小写

cat /etc/passwd | awk 'BEGIN{IGNORECASE=1} /ROOT/ {print $1}' 

        6.剔除空行显示

cat 1.txt | awk '!/^$/'


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1136389.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型 | NEFTune之引入随机噪声对大模型训练的收益

大模型 | NEFTune之引入随机噪声对大模型训练的收益 paper中提到&#xff0c;在模型foward过程中&#xff0c;对inputs_embedding增加适度的随机噪声&#xff0c;会带来显著的收益。 Paper: https://arxiv.org/pdf/2310.05914.pdf Github: https://github.com/neelsjain/NEFT…

苹果官宣新品发布会 10月31日发布会与Mac有关

10 月 25 日消息&#xff0c;苹果宣布将于北京时间 10 月 31 日上午 8 点举行主题为“来势迅猛”的线上特别活动&#xff0c;届时或将有新品发布。 这场发布会与以往不同&#xff0c;将在北京时间 10 月 31 日上午 8 点举行。有很多猜测认为苹果届时会发布新款 Mac 电脑&#x…

dropbear-ssh2

编译&#xff1a; ./configure --prefix/home/lxin/workdir/install-dropbear --with-zlib/home/lxin/workdir/zlib/install-zlib-1.2.11/ CCx86_64-linux-gnu-gcc make clean make make install 生产秘钥 in bin dir: ./dropbearkey -t rsa -f ../sbin/dropbear_rsa_host…

赢得国际市场:小企业的跨境电商品牌策略指南

随着全球化的快速发展&#xff0c;跨境电子商务已经成为小企业突破国界、实现全球化梦想的有效途径。然而&#xff0c;成功的跨境电商经营并不仅仅依赖于产品质量和价格竞争力&#xff0c;品牌营销同样至关重要。本文将深入探讨小企业如何在跨境电商领域做好品牌营销。 一、了解…

感受webWorker

B站视频 git完整代码 之前遇到的场景 1、vxe表格计算1000多条数极值/算数平方根的时候。 2、大文件上传时计算hashCode时候 一、不使用webWorker 目录结构 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&q…

使用Docker部署Apache Superset并实现公网远程访问

大数据可视化BI分析工具Apache Superset实现公网远程访问 文章目录 大数据可视化BI分析工具Apache Superset实现公网远程访问前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网…

上帝视角看支付总架构解析

文章目录 1. 支付全局分层2. 交易服务层2.1 服务平台的支付架构2.2 架构的支付部分2.3 架构的清结算部分2.4 完整的架构 3. 支付服务层3.1 支付接收部分3.2 支付处理部分3.3 清结算部分 4. 清算服务层4.1 常见清算组织4.2 银联清算业务4.3 网联清算业务4.3.1 网联支持的业务4.3…

【Linux】 rpm安装包保存到本地并批量安装

目录 一、开启rpm安装包缓存到本地仓库 1. 修改yum.conf文件 2. 清理yum缓存 3. yum命令安装软件包 二、如何将rpm安装包保存到指定目录 方法一&#xff1a;yumdownloader 1. 安装yum-utils  2. yumdownloader命令参数说明 3. yumdownloader安装示例 方法二&#xff…

用Notepad++写java代码

步骤 1.新建&#xff0c;写代码 2.写好之后存为java文件 3.打开命令行 cd 对应位置 javac xxx.java &#xff08;如有中文&#xff09; java xxxdebug 1.错误: 编码utf-8的不可映射字符 这是代码里有中文&#xff0c;编译时加上-encoding utf-8即可 2.错误: 程序包xxx不存在…

ETO制造商目前面临的六大挑战,如何应对?

与离散制造、库存制造不同&#xff0c;按订单设计制造&#xff08;ETO&#xff09;行业面临着一系列独特的挑战。从复杂的产品设计到与客户的密切联系&#xff0c;按订单生产的每件产品都不尽相同。 如果采用按订单生产方式制造产品&#xff0c;管理者总是会想方设法采购最好的…

基于springboot实现书籍学习平台管理系统项目【项目源码+论文说明】

基于springboot实现书籍学习平台管理系统演示 摘要 首先,论文一开始便是清楚的论述了平台的研究内容。其次,剖析平台需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确平台的需求。然后在明白了平台的需求基础上需要进一步地设计平台,主要…

礼品家居建材行业出口管理ERP解决方案

根据“一带一路”白皮书显示&#xff0c;2013至2022年&#xff0c;中国与共建国家进出口总额累计19.1万亿美元&#xff0c;年均增长6.4%&#xff1b;与共建国家双向投资累计超过3800亿美元。随着“一带一路”高质量共建&#xff0c;第134届广交会第二期打造的“大家居”主体概念…

Python教程:csv如何保存字典数据

下面是一个示例代码&#xff0c;它将字典数据保存到CSV文件中&#xff1a; #我的Python教程 #微信公众号&#xff1a;wdPython首先创建了一个包含字典数据的列表dict_data。然后&#xff0c;我们使用csv.DictWriter()函数创建一个CSV写入对象&#xff0c;指定了字典中的键作为…

智慧燃气,如何能够防患于未“燃”!

关键词&#xff1a;智慧燃气、智慧燃气建设、智慧燃气平台、智慧燃气系统、燃气数字化 天然气作为一种优质的清洁能源&#xff0c;在改善大气污染中起到非常重要的作用。国家也在将天然气发展成为我国主体能源之一。天然气的快速发展也给智慧燃气带来了光明的前途&#xff0c;…

【python】乱码的处理总结

Python 系列 如果你在Python中遇到了乱码问题&#xff0c;可能是由于字符编码不匹配导致的。以下是一些可能的解决方法&#xff1a; &#xff08;1&#xff09; 确认编码格式&#xff1a;首先要确认你的数据的实际编码格式。常见的编码格式包括UTF-8、GBK、GB2312等。确定正确…

goland无法调试问题解决

goland 无法调试问题解决 golang 版本升级后&#xff0c;goland 无法进行调试了 首先请看自己下载的版本是否有误 1.apple系 M系列芯片的 arm64版本 2.apple系 intel系列芯片的x86_64 3.windows系 intel解决如下&#xff1a; 查看gopath ericsanchezErics-Mac-mini gww-api…

一克商评|未来向外输出自动驾驶技术和解决方案的中国企业会越来越多

封面新闻记者 孟梅 欧阳宏宇 雷强 蔡世奇 付文超 小马智行获沙特新未来城1亿美元投资&#xff0c;并将成立合资公司 小马智行宣布获得沙特阿拉伯王国新未来城&#xff08;NEOM&#xff09;及旗下投资基金NIF&#xff08;NEOM Investment Fund&#xff09;的1亿美元投资。同时…

生成树协议:监控 STP 端口和交换机

什么是生成树协议 生成树协议 &#xff08;STP&#xff09; 用于网络交换机&#xff0c;以防止循环和广播风暴。在局域网 &#xff08;LAN&#xff09; 中&#xff0c;两条或多条冗余路径可以连接到同一网段。当交换机或网桥从所有可用端口传输帧时&#xff0c;这些帧开始在网…

金属纳米颗粒通过水基剥离方案使用嵌段共聚物模板

引言 随着纳米结构表面和界面在广泛的科学和技术应用中变得越来越重要&#xff0c;确定可扩展和廉价的方法来实现这些变成了一个关键的挑战。特别是有序、非密集、表面支撑的金属纳米颗粒的大面积阵列的制造&#xff0c;由于其在不同领域如等离子体增强薄膜太阳能电池中的应用…