springboot实战派,awk命令详细说明

本文详细介绍了awk命令的使用,包括如何根据正则表达式筛选行、处理多行记录、使用条件语句和循环语句,以及数组操作。通过多个实例展示了awk在处理文本时的灵活性和强大功能,如分割多列数据、过滤特定行、进行数学运算等。文章最后提到了awk在实际项目中的应用和重要性。
摘要由CSDN通过智能技术生成

awk 允许使用正则表达式,根据正则表达式是否匹配当前行来选择执行独立代码块。以下示例脚本只输出bill中包含字符序列8613902700003的那些行:awk '/8613902700003/ { print }' bill

当然,可以使用更复杂的正则表达式:/[0-9]*/ { print }

下面列出正则表达式元字符:

| 字符 | 描述 |

| — | — |

| .(英文句号) | 可代替除一行之外的任何单个字符,和*不同的是,这个只会打印含有条件的结果,如:awk '/t*/{print}' test.txt,不含有t的结果是不会被打印的 |

| * | 可代替零个或多个在它前面出现的字符 |

| [chars] | 可代替chars中的任何一个字符,chars是一串字符序列。你可以用-符号来定义一个字符范围。如果^是chars中的第一个字符,那么将匹配没有在chars中指定的字符 |

| ^ | 匹配一行的开头 |

| $ | 匹配一行的结尾 |

| \ | 把\后面的字符照常输出,通常用来转义(不使用特殊含义)一个元字符 |

.*的区别,注:使用.和*需要加上/转移符,否则报错。

[root@ccx ccx]# awk ‘/t./{print}’ test.txt

this is a test

good things are about to happen

[root@ccx ccx]# awk ‘/t*/{print}’ test.txt

this is a test

good things are about to happen


我感到难过,不是因为你欺骗了我,而是因为我再也不能相信你了,555

[root@ccx ccx]#

下面列出运算符表达式元字符:

| 运算符 | 描述 |

| — | — |

| = += -= *= /= %= ^= **= | 赋值 |

| ?: | C条件表达式 |

| || | 逻辑或 |

| && | 逻辑与 |

| ~!~ | 匹配正则(包含)与不匹配,比如第二个参数中包含is的内容:$2 ~ is |

| < <= > >= != == | 关系运算符 |

| 空格 | 连接 |

| + - | 加,减 |

| * / % | 乘,除与求余 |

| + - ! | 一元加,减和逻辑非 |

| ^*** | 求幂 |

| ++ -- | 增加或减少,作为前缀或后缀 |

| $ | 字段引用 |

| in | 数组成员 |

| [0-9] | 代表一个单独的数字 |

| [a-z] | 代表一个单独的小写字母 |

| [A-Z] | 代表一个单独的大写字母 |

| [a-zA-Z] | 代表一个单独的字母 |

| [a-zA-Z 0-9] | 代表一个单独的字母或数字 |

bill内容如下:

4429300,0,8613902700001,8613902700002,8613800288500,2004/06/26 10:31:33,2004/06/26 10:31:33,0,0,0,4,6,1,0,0,0,0,2004/06/26 10:31:32,NULL,1,0,0,nihao@,

4429300,0,8613902700001,8613902700003,8613800288500,2004/06/26 10:31:33,2004/06/26 10:31:33,0,0,0,4,6,1,0,0,0,0,2004/06/26 10:31:32,NULL,1,0,0,nihao@,

除了使用正则表达式来选择行,我们也可以使用布尔表达式来选择行。使用方法是将布尔表达式放在代码块之前,仅当对前面的布尔表达式求值为真时,awk才执行代码块。以下示例脚本将输出bill中第四个字段等于8613902700003的所有行中的第三、四字段。如果当前行的第四个字段不等于8613902700003,awk将继续处理文件而不对当前行执行print语句:

$4 == "8613902700003" { print "OrgAddr: "$3, "\tDestAddr: "$4 }

注意,代码块前的布尔表达式必须与代码块在同一行上。

awk 提供了完整的比较运算符集合,包括==<><=>=!=。另外,awk还提供了~!~ 运算符,它们分别表示匹配不匹配。它们的用法是在运算符左边指定变量,在右边指定正则表达式。例如:

$4 ~ /8613902700003/ { print "OrgAddr: "$3, "\tDestAddr: "$4 }

awk还允许使用布尔运算符||(逻辑或)和&&(逻辑与),以便创建更复杂的布尔表达式:

( $3 == "8613902700001" ) && ( $4 == "8613902700003" ) { print }

awk的另一个优点是它有完整的数学运算符集合。除了标准的加、减、乘、除,awk还允许使用指数运算符^、模运算符%和其它许多从C语言中借入的易于使用的赋值操作符。

这些运算符包括前后加减(i++、–j)、加/减/乘/除赋值运算符(a+=3、b*=2、c/=2.2、d-=6.2)。不仅如此,还有易于使用的模/指数赋值运算符(a^=2、b%=4)。

2.4 字符串化变量


awk变量“字符串化”是指所有awk变量在内部都是按字符串形式存储的。而且只要变量包含有效数字字符串,就可以对它执行数学操作,awk会自动处理字符串到数字的转换步骤。请看以下这个示例:

BEGIN { x=“0” }

/^$/ { x=x+1 }

END { print “I found " x " blank lines. 😃” }

这个例子的功能是计算文件中空白行的数量,^$表示空行。

如果做一个小实验,就可以发现如果某个特定变量不包含有效数字,awk在对数学表达式求值时会将该变量当作数字0处理。

3 第二部分:提高

========================================================================

3.1 处理多行


在这一节里,顺带着讲一下三个特别的变量:

| Awk特殊变量 | 描述 |

| — | — |

| RS | 表示记录分隔符 |

| OFS | 表示输出字段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值