awk ‘{print $1”补充字段"}’
默认以空格或tab分割,$0代表整行,$1代表分割后的第一个单词,以此类推,上面例子会打印出分隔符后第一个单词和“补充字段”。
awk -F : ‘/关键字/’ ./filename
eg:awk -F: '/update/' ./ids.sql
这里 -F 代表以什么符号分割,//中间是关键字 用来获取有这个关键字的行。
awk -F ‘分隔符’ BEGIN {print “列名1,列名2”} END {print “补充字段,补充字段”}’
eg:cat ids.sql | awk -F 'company_id' 'BEGIN {print "name,shell"} {print $1","$2} END {print "blue,/bin/nosh”}’
这里BEGIN END 是指会按顺序执行awk 语句,注意这里 BEGIN 和 END 要大写,否则无效
awk '{printf "select * from %s where id = %s;\n", $2, $6}'
eg: cat ids.sql | awk '{printf "select * from %s where id = %s;\n", $2, $6}’
printf 比 print更整洁
awk编程
cat ids.sql | awk 'BEGIN {count=0; print "count is ", count} {count += 1;} END {print "end count is ", count}’
![](https://img-blog.csdnimg.cn/20200813170920935.png)
循环获取总行数,count初始化为0,并打印出来
ls
-l |
awk
'
BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}
’
统计某个文件夹下的文件占用的字节数
awk 使用for循环打印数组,将每行的某个值作为数组中的一个元素,end时遍历数组打印数组序列号和数组元素值。
awk -F 'id=' 'BEGIN {count=0;} {name[count]=$3; count++;} END {for(i = 0; i<10; i++) print i, name[i]}'
eg:cat ids.sql | awk -F 'id=' 'BEGIN {count=0;} {name[count]=$3; count++;} END {for(i = 0; i<10; i++) print i, name[i]}'
![](https://img-blog.csdnimg.cn/2020081317092117.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L09yZGFpbl8zMDUw,size_16,color_FFFFFF,t_70)