https://www.cnblogs.com/losbyday/p/5854707.html
玩转linux——linux awk命令详解【转】_weixin_33675507的博客-CSDN博客
https://www.cnblogs.com/ginvip/p/6352157.html
shell学习笔记2---awk字符串处理(原创)_czmmiao的博客-CSDN博客
shell学习笔记1---awk基础(原创)_weixin_33802505的博客-CSDN博客
(精确匹配==、模糊匹配~)
awk '{if($4~/Brown/) print $0}' grade.txt --匹配,包含 awk '$0 !~ /Brown/' grade.txt --不匹配
awk '$3=="48" {print$0}' grade.txt
cat xxx.txt | awk -F, 'substr($0,3,2)=="11" {print $0}' --打印第3位和第4位等于11的记录
文档一般都是按照某种分隔符写,具有一定的规律性。
$NF 最后一个字段
$NR 行
内置变量
sed -i "s/`cat b.txt |awk '{print $2 }'|awk 'NR==6{print}'`/`cat a.txt |awk '{print $4 }'|awk 'NR==6{print}'`/g" b.txt
cat xxx.txt | awk -F '{s=substr($0,1,1) print s}'
echo "123" | awk '{print substr($0,1,1)}'
awk -F"|" 'BEGIN{}{}END{}' xxx.txt
cat file.txt|awk -F"|" '{print $1}' --以|对文件进行分割,输出第一个字段
BEGIN 和 END 模块
通常,对于每个输入行, awk 都会执行每个脚本代码块一次。然而,在许多编程情况中,可能需要在 awk 开始处理输入文件中的文本之前执行初始化代码。对于这种情况, awk 允许您定义一个 BEGIN 块。
因为 awk 在开始处理输入文件之前会执行 BEGIN 块,因此它是初始化 FS(字段分隔符)变量、打印页眉或初始化其它在程序中以后会引用的全局变量的极佳位置。
awk 还提供了另一个特殊块,叫作 END 块。 awk 在处理了输入文件中的所有行之后执行这个块。通常, END 块用于执行最终计算或打印应该出现在输出流结尾的摘要信息。
awk 'BEGIN {count=0;print "[start] user count is ",count} {count=count+1;print $0}
END{print "[end] user count is ",count}' passwd
[start] user count is 0
root:x:0:0:root:/root:/bin/bash
...................................................................
[end] user count is 27
(count是自定义变量。之前的action{}里都是只有一个print,其实print只是一个语句,而action{}可以有多个语句,以;号隔开。这里没有初始化count,虽然默认是0,但是妥当的做法还是初始化为0)
awk 可以同时处理多个文件。
awk '{pattern + actions}' files
将匹配到的数值进行增加30
sed "s/\(testlm\)\([0-9]\{1,\}\)/\1`expr \2 + 30`/g" nnn.txt > newfile.txt
文件中的内容为testlm10,testlm11;将替换为testlm40,41