[17]AWK记录、字段、模式、跨平台移植及正则表达式

2023-10-26

一,记录与字段
1,
记录分隔符:默认行输入和输出的分隔符都是回车,保存在RS和ORS内部变量中。变量$0:awk每次一行取得整条记录,$0随之改变,同时内部变量NF(字段的总数)也随之变化。变量NR:每条记录的行号,处理完一行将会加1,所以全部处理完后可以理解成行数的总数。
2,
 FS:           Field   Separator
OFS:           Output     Field   Separator
 RS:           Row     Separator (行分隔符)
ORS:           Output     Row     Separator
 NF:           Number of Fields
 NR:           Number of Rows
正在处理的哪一行就变成了$0
3,
[root@rhel helinbash]# gawk '{print NR,"--> ",$0}' /etc/passwd
1 -->  root:x:0:0:root:/root:/bin/bash
2 -->  bin:x:1:1:bin:/bin:/sbin/nologin
3 -->  daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 -->  adm:x:3:4:adm:/var/adm:/sbin/nologin
5 -->  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 -->  sync:x:5:0:sync:/sbin:/bin/sync
7 -->  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 -->  halt:x:7:0:halt:/sbin:/sbin/halt
9 -->  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 -->  news:x:9:13:news:/etc/news:
11 -->  uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
12 -->  operator:x:11:0:operator:/root:/sbin/nologin
13 -->  games:x:12:100:games:/usr/games:/sbin/nologin
14 -->  gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
15 -->  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
16 -->  nobody:x:99:99:Nobody:/:/sbin/nologin
17 -->  nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
18 -->  vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
19 -->  rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
20 -->  mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
21 -->  smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
22 -->  pcap:x:77:77::/var/arpwatch:/sbin/nologin
23 -->  ntp:x:38:38::/etc/ntp:/sbin/nologin
24 -->  dbus:x:81:81:System message bus:/:/sbin/nologin
25 -->  avahi:x:70:70:Avahi daemon:/:/sbin/nologin
26 -->  sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
27 -->  rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
28 -->  nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
29 -->  haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
30 -->  avahi-autoipd:x:100:101:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
31 -->  xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
32 -->  gdm:x:42:42::/var/gdm:/sbin/nologin
33 -->  sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
34 -->  oracle:x:500:500::/home/oracle:/bin/bash
35 -->  named:x:25:25:Named:/var/named:/sbin/nologin
[root@rhel helinbash]# 
4,
[root@rhel helinbash]# gawk '{print NR,"--> ",$1}' names.txt
1 -->  Tom
2 -->  Molly
3 -->  John
4 -->  yang
[root@rhel helinbash]# gawk '{print NR,":",NF,"--> ",$1}' names.txt
1 : 3 -->  Tom
2 : 3 -->  Molly
3 : 3 -->  John
4 : 3 -->  yang
[root@rhel helinbash]# 
5,
[root@rhel helinbash]# vim names.txt
[root@rhel helinbash]# gawk '{print NR,":",NF,"--> ",$1}' names.txt 
1 : 3 -->  Tom
2 : 3 -->  Molly
3 : 3 -->  John
4 : 4 -->  yang
[root@rhel helinbash]# cat names.txt
Tom Savage                 100
Molly   Lee           200
John  Doe       300
yang wawa    asdfas  -121212
[root@rhel helinbash]# 

[root@rhel helinbash]# cat names.txt
Tom Savage                 100
Molly   Lee           200
John  Doe       300
yang wawa    asdfas  -121212
[root@rhel helinbash]# 
6,
[root@rhel helinbash]# gawk '{print $1,$NF}' names.txt                  
Tom 100
Molly 200
John 300
yang -121212
[root@rhel helinbash]# 
二,跨平台数据移植格式转换
1,
把linux文本转化为window文本
[root@rhel helinbash]# gawk '{ORS="\r\n";RS="\n";print $0}' names.txt > names.win
[root@rhel helinbash]# cat names.win
Tom Savage                 100
Molly   Lee           200
John  Doe       300
yang wawa    asdfas  -121212
2,
把window文本转化为linux版本
[root@rhel helinbash]# gawk '{ORS="\n";RS="\r\n";print $0}' names.win > names.linux
[root@rhel helinbash]# cat names.linux 
Tom Savage                 100
Molly   Lee           200
John  Doe       300
yang wawa    asdfas  -121212
[root@rhel helinbash]# 
三,模式
1,
awk模式用来控制输入的文本行执行什么样的操作
模式为正则表达式
模式具有着隐式if语句
模式写在模式操作符两个“//”中
2,
[root@rhel helinbash]# gawk '/^root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@rhel helinbash]# 
3,
操作

格式

模式{操作语句1;操作语句2;....;}
或者

模式
{
操作语句1
操作语句2
........
}
4,
模式对单列处理
[root@rhel helinbash]# gawk -F: '/bash$/{ print $1}' /etc/passwd
root
oracle
[root@rhel helinbash]# gawk -F: '$7 ~ /bash$/{ print $1}' /etc/passwd 
root
oracle
[root@rhel helinbash]# 
[root@rhel helinbash]# gawk -F: '$7 !~ /bash$/{ print $1}' /etc/passwd
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
gopher
ftp
nobody
nscd
vcsa
rpc
mailnull
smmsp
pcap
ntp
dbus
avahi
sshd
rpcuser
nfsnobody
haldaemon
avahi-autoipd
xfs
gdm
sabayon
named
[root@rhel helinbash]# 
四,正则表达式
1,
很多地方都是用到正则表达式来匹配特定的信息
^ 串首
$ 串尾
. 匹配单个任意字符
* 匹配零个或多个前面的字符
+ 匹配一个或多个前面的字符
? 匹配零个或一个前面的字符
[ABC] 匹配括号中给出的任一个字符
[A-Z] 匹配A到Z之间的任一个字符
A|B   匹配二选一,或者的意思,等同于[AB]
(AB)+ 匹配一个或多个括号中的组合
\*    星号本身,转义星号本身
2,
[root@rhel helinbash]# gawk '/^a/' test.txt
a
ab
abab
abbb
ababab
aaab
[root@rhel helinbash]# gawk '/^a$/' test.txt
a
[root@rhel helinbash]# gawk '/a$/' test.txt 
a
baaa
[root@rhel helinbash]# gawk '/..../' test.txt
abab
abbb
ababab
aaab
baaa
[root@rhel helinbash]# gawk '/^....&/' test.txt
[root@rhel helinbash]# gawk '/^....$/' test.txt  
abab
abbb
aaab
baaa
[root@rhel helinbash]# cat test.txt
a
ab
abab
abbb
ababab
aaab
baaa
[root@rhel helinbash]# 
3,
[root@rhel helinbash]# vim test.txt
[root@rhel helinbash]# cat test.txt
a
ab
abab
abbb
ababab
aaab
baaa
c.tx
[root@rhel helinbash]# gawk '/^....$/' test.txt
abab
abbb
aaab
baaa
c.tx
[root@rhel helinbash]# gawk '/^.\...$/' test.txt
c.tx
[root@rhel helinbash]# 
4,
[root@rhel helinbash]# gawk '/^a*$/' test.txt     
a
[root@rhel helinbash]# cat test.txt
a
ab
abab
abbb
ababab
aaab
baaa
c.tx
5,
[root@rhel helinbash]# vim test.txt
[root@rhel helinbash]# gawk '/^a*$/' test.txt
a
aaaaa
aaaa
[root@rhel helinbash]# cat test.txt
a
ab
abab
abbb
ababab
aaab
baaa
c.tx
aaaaa
aaaa
[root@rhel helinbash]# 
6,
[root@rhel helinbash]# gawk '/^a*$/' test.txt           
a
aaaaa
aaaa
[root@rhel helinbash]# vim test.txt
[root@rhel helinbash]# cat test.txt
a
ab
abab
abbb
ababab
aaab

baaa
c.tx
aaaaa
aaaa
[root@rhel helinbash]# gawk '/^a*$/' test.txt   #  注: * 可以匹配空行就是出现了0次       
a

aaaaa
aaaa
[root@rhel helinbash]# gawk '/^a+$/' test.txt    #  注: 这个不可以匹配空行至少出现1次
a
aaaaa
aaaa
[root@rhel helinbash]# 

[root@rhel helinbash]# gawk '/^a?$/' test.txt 
a

[root@rhel helinbash]# 

[root@rhel helinbash]# gawk '/^[ab]*/' ./test.txt
a
ab
abab
abbb
ababab
aaab

baaa
c.tx            #为什么会出现,因为ab出现了0次,也就是*的含义
aaaaa
aaaa
[root@rhel helinbash]# gawk '/^[ab]*$/' ./test.txt
a
ab
abab
abbb
ababab
aaab

baaa
aaaaa
aaaa
[root@rhel helinbash]# 

[root@rhel helinbash]# gawk '/^[^ab]*$/' ./test.txt

c.tx
[root@rhel helinbash]# 

[root@rhel helinbash]# cat test.txt
a
ab
abab
abbb
ababab
aaab

baaa
c.tx
aaaaa
aaaa
[root@rhel helinbash]# 
7,
[root@rhel helinbash]# cat test.txt
a
ab
abab
abbb
ababab
aaab

baaa
c.tx
aaaaa
aaaa
dddddddddddddd
ffffffffff
faaaaaaaaaa
kjjjjjjj
[root@rhel helinbash]# gawk '/^[^ab]*$/' ./test.txt

c.tx
dddddddddddddd
ffffffffff
kjjjjjjj
[root@rhel helinbash]# 
8,
[root@rhel helinbash]# gawk '/(ab)*/' test.txt
a
ab
abab
abbb
ababab
aaab

baaa
c.tx
aaaaa
aaaa
dddddddddddddd
ffffffffff
faaaaaaaaaa
kjjjjjjj
[root@rhel helinbash]# 


[root@rhel helinbash]# gawk '/^(ab)*$/' test.txt
ab
abab
ababab

[root@rhel helinbash]# 
9,
[root@rhel helinbash]# gawk '/^(ab)\{3\}*$/' test.txt          #{3}这种不支持
[root@rhel helinbash]#



FROM:  http://blog.itpub.net/29611940/viewspace-1174232/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[17]AWK记录、字段、模式、跨平台移植及正则表达式 的相关文章

  • python-正则表达式入门初级篇

    Python 正则表达式入门 初级篇 本文主要为没有使用正则表达式经验的新手入门所写 转载请写明出处 引子 首先说 正则表达式是什么 正则表达式 又称正规表示式 正规表示法 正规表达式 规则表达式 常规表示法 英语 Regular Expr
  • JAVA 正则表达式 (超详细) .

    在Sun的Java JDK 1 40版本中 Java自带了支持正则表达式的包 本文就抛砖引玉地介绍了如何使用java util regex包 可粗略估计一下 除了偶尔用Linux的外 其他Linu x用户都会遇到正则表达式 正则表达式是个极
  • 常用数字电路模块之三:计数器与分频器(二))

    三 分频电路 1 简单的计数器 计数器实质是对输入的驱动时钟进行计数 所以计数器在某种意义上讲 等同于对时钟进行分频 例如一个最大计数长度为N 2 n 从0计数到N 1 的计数器 也就是寄存器位数位n 那么寄存器最高位的输出为N 2 n分频
  • js验证邮箱的正则表达式

    最近小小研究了一下正则表达式 觉得写正则表达式还挺有意思的 先想推荐一个网址 把正则表达式的基本语法都总结了 很不错 https msdn microsoft com zh cn library ae5bf541 v vs 100 aspx
  • Day 13 - 正则表达式习题

    利用正则表达式完成下面的操作 1 用户名匹配 要求 1 用户名只能包含数字 字母 下划线 2 不能以数字开头 3 度在 6 到 16 位范围内 re username re compile r a zA Z w 5 15 print re
  • 【JAVA】正则表达式是啥?

    个人主页 个人主页 系列专栏 初识JAVA 文章目录 前言 正则表达式 正则表达式语法 正则表达式的特点 捕获组 实例 前言 如果我们想要判断给定的字符串是否符合正则表达式的过滤逻辑 称作 匹配 可以通过正则表达式 从字符串中获取我们想要的
  • 人人都看得懂的正则表达式教程

    编写验证规则最流行和最简单的方法就是正则表达式了 但唯一的一个问题是正则表达式的语法太隐晦了 让人蛋疼无比 很多开发者为了在项目中应用复杂的验证 经常要使用一些小抄来记住正则式的复杂语法和各种常用命令 在这篇文章中 我将试图让大家明白什么是
  • python正则表达式从字符串中提取数字的思路详解(转载)

    python从字符串中提取数字 使用正则表达式 用法如下 总结 匹配字符串的开始 匹配字符串的结尾 b 匹配一个单词的边界 d 匹配任意数字 D 匹配任意非数字字符 x 匹配一个可选的 x 字符 换言之 它匹配 1 次或者 0 次 x 字符
  • Java正则工具类:字母数字下划线、数据库url校验等

    文章目录 前言 一 正则基础语法 二 正则工具类 总结 前言 本文内容观摩的是其他作者的代码 在基础上增加修改了一些 参考原文地址 java用正则表达式 提示 以下是本篇文章正文内容 下面案例可供参考 一 正则基础语法 字符 描述 匹配输入
  • Web前端复习——JS(正则表达式+内置对象)

    正则表达式 专门规定字符中字符 格式规则 的表达式 何时使用 只要定义字符串格式规则 都用正则表达式 最简单正则 一个关键词的原文 就是最简单的正则 1 备选字符集 规定某 一位 字符可选的备选文字列表 语法 备选字符列表 强调 1 无论备
  • Java正则表达式详解

    1 1 正则表达式的概念以及演示 正则表达式可以用一些规定的字符来制定规则 并用来校验数据格式的合法性 正则表达式就是用来验证各种字符串的规则 它内部描述了一些规则 我们可以验证用户输入的字符串是否匹配这个规则 正则表达式是一种强大的校验机
  • Python3 如何优雅地使用正则表达式(详解五)

    非捕获组命名组 精心设计的正则表达式可能会划分很多组 这些组不仅可以匹配相关的子串 还能够对正则表达式本身进行分组和结构化 在复杂的正则表达式中 由于有太多的组 因此通过组的序号来跟踪和使用会变得困难 有两个新的功能可以帮你解决这个问题 非
  • js常用正则表达式 匹配多个汉字、数字、英文、所有字符(附带Layui中form的表单验证)

    常用正则表达式 转自 菜鸟工具 https c runoob com front end 854 一 校验数字的表达式 数字 0 9 n位的数字 d n 至少n位的数字 d n m n位的数字 d m n 零和非零开头的数字 0 1 9 0
  • Java正则校验密码至少包含:字母数字特殊符号中的2种

    一 语法 字符 说明 将下一字符标记为特殊字符 文本 反向引用或八进制转义符 例如 n匹配字符 n n 匹配换行符 序列 匹配 匹配 匹配输入字符串开始的位置 如果设置了 RegExp 对象的 Multiline 属性 还会与 n 或 r
  • 【Linux命令—shell】正则表达式

    正则表达式 regular expression 描述一个字符集合的表达方式 模糊匹配 目录 1 基本正则 2 扩展正则 3 兼容的正则 perl 4 综合案例练习 1 基本正则 演示如下 2 扩展正则 注意 grep不支持扩展正则 如果需
  • js正则表达式

    w3school 正则表达式 一 正则表达式的使用 首先 我们一般使用正则表达式用来进行验证邮箱手机号等 进行匹配 1 编写一个正则表达式 var rule 我是一个正则表达式 2 使用正则表达式来进行验证 var isrule rule
  • JS字符串替换函数全部替换方法

    color olive JS字符串替换函数 Replace 字符串1 字符串2 1 我们都知道JS中字符串替换函数是Replace 字符串1 字符串2 但是这个函数只能将第一次出现的字符串1替换掉 那么我们如何才能一次性全部替换掉了 将上面
  • Java 正则表达式工具类大全

    import java util regex Matcher import java util regex Pattern author nql Description 验证工具类 date now public class Validat
  • 正则校验手机号

    正则表达式可以用来校验手机号码的合法性 如果你想使用正则表达式来校验中国大陆的手机号码 可以使用如下的正则表达式 1 3 9 d 9 这个正则表达式可以匹配所有 13 到 19 开头的 11 位数字 即所有中国大陆的手机号码 例如 如果你想
  • java正则表达式的语法详解及常用方法

    一 实例 今天在实现一个功能时遇到了这样一个问题 及接口传过来一个字符串 我需要判断它是一个区间还是一段文字并对其做分别处理 这里面的问题就在于我怎么去判断区间 按照数学规律区间可分为以下几种情况 M M N N N M N M N N N

随机推荐

  • 解决M1处理器款mac安装PR闪退问题 Premier 2020 Mac(已适配M1芯片,支持最新款M1芯片Mac)可稳定运行

    苹果公司最新发布的基于M1芯片的Mac笔记本电脑应该很多小伙伴都入手了 但是最新的Mac由于采用的是基于ARM架构的核心 对很多基于Intel 英特尔 处理器的老款mac的软件应用兼容不太好 导致很多现有软件安装好后无法运行 或者报错和闪退
  • elasticsearch query related

    public abstract class EsBaseDaoImpl
  • 汽车电子_EMC测试_RE试验整改

    测试设备DUT状态 DUT带壳 未安装导电泡棉 辐射抗扰度试验 辐射抗扰度试验 270MHz频段出现画面卡死 试验暂停未继续 BCI试验 CBCI出现故障 RE试验 30 200M H方向 Frequency MHz MaxPeak dB
  • Maven高级:多环境配置与应用

    Maven高级 Maven高级 分模块开发 Maven高级 依赖管理 Maven高级 聚合和继承 Maven高级 根据需求完成生成 开发 测试环境 并在各个环境间切换运行 一 多环境配置与应用 这一节中 我们会讲两个内容 分别是多环境开发和
  • vue3 antd 表格点击和点击背景色

    页面
  • win7在64位系统下编译openssl

    以前在笔记本上配置过openssl 0 9 8g版本 今天在公司的台式机上配置死活没配置成功 机器的系统是win7 64位 编译openssl 1 0 1e出现各种莫名的错误 最后无意中编译了1 0 0 a版本编译成功了 如果出现ml找不到
  • Selenium-Server-Standalone搭建

    一 概述 先说说背景吧 Selenium是一个优秀的自动化测试框架 可以模拟浏览器的各种操作来代替人工操作 不同的浏览器有 不同的driver来驱动 之前项目中使用的firefoxDriver chromeDriver有一个缺点 就是浏览器
  • VSCode配置MSVC+VSCode使用easyx库,2021.5.13日配置~~

    VSCode配置MSVC VSCode使用easyx库 2021 5 13日配置 想必很多人和我一样 想用vscode编程c easyx库不支持MinGW 一般人都是直接使用vs2019安装easyx库用来GUI编程 那么爱折腾的VSCod
  • 使用PHP简单操作Memcached

    记得一定要先启动Memcached哦 root localhost usr bin memcached d l 127 0 0 1 p 11211 m 150 u root 使用ps命令查看一下运行状态 root localhost ps
  • 结构体内存对齐详解

    目录 一 结构体的对齐规则 二 修改默认对齐数 三 位段 四 枚举 五 联合 共用体 一 结构体的对齐规则 1 第一个成员在与结构体变量偏移量为0的地址处 2 其他成员变量要对齐到某个数字 对齐数 的整数倍的地址处 对齐数 编译器默认的一个
  • Ubuntu16.04 64位下安装VMware Tools过程

    因为在虚拟机下安装Ubuntu16 04 64位时无法进入全屏模式 采用另外一种方法解决了 但是还是想安装一下VMware Tools 防止以后出现相关问题 好啦 下面进入正题 1 在虚拟机下会看到安装 VMware Tools 单击安装
  • C# 各种符号用法

    参考 C 的7种用法 c 软泡芙的博客 CSDN博客 C 问号操作符详解 知乎 的7种用法 可空类型修饰符 int i num null 表示可空的整型 DateTime time dateTime null 表示可空的时间 三元 运算符
  • join(long millis)意思?join()作用

    join 作用 class JoinThread implements Runnable public void run for int i 0 i lt 100 i System out println Thread currentThr
  • FT2232作为JTAG烧录器的使用步骤详解

    FT2232作为JTAG烧录器的使用步骤详解 FT2232作为JTAG烧录器的使用步骤详解 配置OpenOCD环境 已经配置好的可以跳过 步骤 1 安装 FT2232HL 芯片的驱动 安装文件为 CDM21228 Setup exe 步骤
  • unity AR3D物体识别

    上篇讲到了各种AR插件的一些对比 因为上个项目需求用到3D物体追踪 所以使用了EasyAR和Vuforia两种进行了测试对比 因为如果需要AR识别 都需要有识别点 大致都是基于物体材质纹理来进行识别 1 先讲一下EasyAR的3D物体识别
  • 【百问网】物联网项目学习总结

    初步实现项目 项目程序流程图 TCP连接流程 模式1 站点模式 写代码去实现了这个TCP的连接流程 我们的思路就是 首先直接操作ESP8266 进行功能验证 ST Link Debugger 点击Settings 勾选Reset and R
  • 远程访问数据库出错的解决办法

    案例 在aws服务器中的项目访问在华为云中的测试服务器的数据库 报错 Access denied for user root ec2 XXX XXX XXX XXX cn north 1 compute amazonaws com cn u
  • Linux指令系统文件复制到U盘

    Linux指令系统文件复制到U盘 文章目录 Linux指令系统文件复制到U盘 1 建立U盘挂载点 2 查看U盘所在分区 3 查看U盘类型 4 挂载U盘 5 复制文件 6 移除U盘 1 建立U盘挂载点 在挂载点处建立文件夹 mkdir 路径
  • 【Java面试题汇总】设计模式篇(2023版)

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud 黑马旅游 谷粒商城 学成在线 设计模式 牛客面试题 目录 谈谈你对设计模式的理解 谈谈你对单例模式的理解 手写一
  • [17]AWK记录、字段、模式、跨平台移植及正则表达式

    一 记录与字段 1 记录分隔符 默认行输入和输出的分隔符都是回车 保存在RS和ORS内部变量中 变量 0 awk每次一行取得整条记录 0随之改变 同时内部变量NF 字段的总数 也随之变化 变量NR 每条记录的行号 处理完一行将会加1 所以全