shell学习

1.awk

1.1原理

  • 扫描输入文件:Awk 从输入文件逐行读取数据,每行作为一个记录,逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。可以通过指定的字段分隔符将每行分割成多个字段。

  • 模式匹配:对于每一行记录,Awk 可以执行指定的模式匹配操作,以确定是否应用相应的操作。模式可以是正则表达式、条件判断或特定的行号等。

  • 执行操作:当某行满足模式匹配条件时,Awk 执行指定的操作。操作可以是输出、计算、字符串处理、变量赋值等,以对数据进行处理。

  • 输出结果:根据执行的操作,Awk 可以生成输出结果。输出可以是打印到标准输出、格式化输出、写入文件等。

1.2 常见的内建变量

变量名称 描述
FS 指定每行文本的字段分隔符,默认为空格或制表位。
NF 当前处理的行的字段个数。
NR 当前处理的行的行号(序数)。
$0 当前处理的行的整行内容。
$n 当前处理行的第 n 个字段(第 n 列)。
FILENAME 被处理的文件名。
RS “行“分割符,AWK 从文件上读取资料时,将根据 RS 的定义把资料切割成许多条记录;AWK 一次仅读入一条记录,以进行处理,预设值是 \n。

1.3 实例

现在有个文件file.txt

John Doe 25 55
Jane Smith 30
Adam Johnson 28

awk '{print NF}' file.txt #打印当前行的字段数,空格隔开的数据,这里的结果是
	4
	3
	3
awk '{print NR}' file.txt #打印当前行的行号,这里的结果是
	1
	2
	3
awk '(NR>=2)&&(NR<=4)' file.txt  #打印第2--4,注意print可以省略
awk '(NR==2)||(NR==4){print}' file.txt  #打印第2行和第4行
awk '(NR%2)==1{print}' file.txt  #打印奇数行
awk '{print $0}' file.txt # 打印当前行的所有字段,这里的结果是
	John Doe 25 55
	Jane Smith 30
	Adam Johnson 28
awk '{print $2}' file.txt # 打印当前行的第2列数据,这里的结果是
	Doe
	Smith
	Johnson
awk 'BEGIN {FS = "," } {print $2 $3}' file.txt #这里不在以默认的空格为分割符,而是以“,”为分隔符,然后打印文件每一行的第2列,第3列
awk '/^a/{print}' file.txt #打印以a开头的所有行  /***/ 表示***是一个正则表达式
awk '/hello$/{print}' file.txt #打印以hello结尾的所有行
awk -F ":" {print $4} file.txt #以:为分隔符,打印文件第四个字段

相关推荐

  1. Shell学习——Shell运算符

    2024-03-14 07:58:02       47 阅读
  2. shell学习

    2024-03-14 07:58:02       52 阅读
  3. shell学习

    2024-03-14 07:58:02       34 阅读
  4. Shell学习——Shell printf命令

    2024-03-14 07:58:02       24 阅读
  5. shell学习---杂谈

    2024-03-14 07:58:02       54 阅读
  6. 学习Shell脚本编程】

    2024-03-14 07:58:02       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 07:58:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 07:58:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 07:58:02       82 阅读
  4. Python语言-面向对象

    2024-03-14 07:58:02       91 阅读

热门阅读

  1. SpringBoot 中使用自定义参数解析器修改请求对象

    2024-03-14 07:58:02       42 阅读
  2. 浏览器文件下载

    2024-03-14 07:58:02       40 阅读
  3. IO进程线程day8

    2024-03-14 07:58:02       33 阅读
  4. 你知道数据库有哪些约束吗?

    2024-03-14 07:58:02       41 阅读
  5. Ribbon跟Nginx实现负载均衡的区别!

    2024-03-14 07:58:02       41 阅读
  6. 【分布式websocket】聊天系统消息加密如何做

    2024-03-14 07:58:02       48 阅读