写在前面:
最近在学习Linux命令,记录一下学习Linux常用命令的过程,方便以后复习。仅供参考,若有不当的地方,恳请指正。如果对你有帮助,欢迎点赞,关注,收藏,评论,谢谢。
awk命令 用于模式扫描和文本/数据提取
awk 是一种处理文本文件的语言,是一个强大的文本分析工具。
awk 通过提供编程语言的功能,如变量、数学运算、字符串处理等,使得对文本文件的分析和操作变得非常灵活和高效。
之所以叫 awk 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
1. 基本语法
awk options 'pattern {action}' file
选项参数说明:
options:是一些选项,用于控制 awk 的行为。
pattern:是用于匹配输入数据的模式。如果省略,则 awk 将对所有行进行操作。
{action}:是在匹配到模式的行上执行的动作。如果省略,则默认动作是打印整行。
options 参数说明:
-F <分隔符> 或 --field-separator=<分隔符>: 指定输入字段的分隔符,默认是空格。使用这个选项可以指定不同于默认分隔符的字段分隔符。
-v <变量名>=<值>: 设置 awk 内部的变量值。可以使用该选项将外部值传递给 awk 脚本中的变量。
-f <脚本文件>: 指定一个包含 awk 脚本的文件。这样可以在文件中编写较大的 awk 脚本,然后通过 -f 选项将其加载。
-v 或 --version: 显示 awk 的版本信息。
-h 或 --help: 显示 awk 的帮助信息,包括选项和用法示例。
2. 基础打印和字段操作
2.1 打印整行
如:awk '{print}' 02.txt。这个命令和cat 02.txt的效果一样。但是,当你需要执行更复杂的文本处理任务时,awk 就会变得非常有用。
2.2 打印特定列
如:awk '{print $1,$2}' 02.txt,打印每一行的第一列和第二列。
(注意每两个字段之间都有一个空格)
2.3 使用分隔符指定列
如:awk -F',' '{print $1, $2}' 02.txt,将‘,’换成 空格。
3. 变量和计算
3.1 计算列的总和
如:awk '{sum += $1} END {print sum}' 02.txt。
3.2 条件计算和打印
如:awk '$1 > 10 { print $1 }' 1.txt。
4.条件语句和循环
4.1 if-else条件语句
如:awk '{ if ($1 > 10) print "Number is greater than 10"; else print "Number is 10 or less" }' 1.txt。
4.2 for循环遍历字段
如:awk '{ for(i=1; i<=NF; i++) print $i }' 1.txt。
遍历每一行的每个字段并打印它们。
5. 内置函数和正则表达式
5.1 使用内置函数打印行长度
如:awk '{ print length }' 1.txt。
打印文件1.txt中每行的字符数。
5.2 使用正则表达式匹配并打印
awk '/pattern/ {print NR, $0}' file
'/pattern/':这是一个模式匹配操作。awk 会逐行读取 file 的内容,并且只有当某行包含 pattern 这个模式时,才会执行大括号 {} 内的动作。这里的 pattern 可以是任何正则表达式,用于匹配文本。
如:awk '/1,2,3/ {print NR, $0}' 02.txt。
6. 文件操作和其他高级功能
6.1 从其他命令读取数据
如:echo -e "a 1\nb 2" | awk '{ print $2, $1 }'。
6.2 多文件处理
如:awk 'FNR==1 {print FNR, " ", $0}' 1.txt 3.txt。
打印file1和file2的第一个文件记录号(FNR)和对应的整行内容。