条件 动作
awk 默认使用空格或者tab键作为分隔符
使用{FS=":"}指定分隔符
END
awk 'END{printf "The End \n"} {printf $2 "\t" $4 "\n"}' student.txt
BEGIN
awk 'BEGIN{printf "This is a transcript \n"} {printf $2 "\t" $4 "\n"}' student.txt
awk '{printf $2 "\t" $4 "\n"}' student.txt df -h | awk '{print $1 "\t" $3}'
关系运算符
cat student.txt | grep -v Name | \ awk '$4 >= 70 {printf $2 "\n"}'
FS 内置变量
cat/etc/passwd | grep"/bin/bash" | \ awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}'
mmmmmmmm
通过grep加管道符 实现指定行的编辑操作.
awk '条件1{动作1} 条件2{动作2}....’文件名
df -h | grep "/dev/sda5" | awk '{print $5}'
df -h | awk '{print $5}' 截取第5列数据
由于awk的执行原理是先读取数据再判断条件然后执行动作,所以awk在不加BEGIN的情况下先读取第一行数据也就是“root:0:0:root:/root:/bin/bash”再执行{FS=":"}、{printf $1 "\t" $3 "\n"}这两个动作,而此时由于第一条数据已经读取因此{FS=":"}这一动作只对后两条数据起作用
grep -v:显示不包含匹配文本的所有行。反向查找
cat test.txt | grep -v "name" | awk '$3>1{print $2}'
FS内置变量:作用是指定分割符是什么
例子:
cat /etc/passwd | grep '/bin/bash' | awk 'BEGIN{FS=":"}{print $1 "\t" $3}'
BEGIN作用是在执行读取内容放到$1这些变量之前就执行的条件
如果没有这个条件的话,第一行可能没有执行你的查询条件,因为他已经读取内容放进$1这些变量里了
为什么使用awk不是呀cut因为有一些字符串不一定以一些规律的分隔符分割所以我们需要使用更强大的awk来截取字符串
例如:df -h | cut -f 5 -d " "
这样是截取不出来的
可以使用awk
df -h | grep "/dev/vda1" | awk '{print $5}' | cut -f 1 -d "%"
df -h | awk '{print $5}' #df第五字段数据
df -h | grep "/dev/sda5" | awk '{print $5}' #只要根分区的第五段数据
df -h | grep "/dev/sda5" | awk '{print $5}' | cut -d "%" -f 1 #去掉%
awk 'BEGIN{print "test"}{print $2 "\t" $4}' student.txt #先执行BEGIN
awk 'END{print "test"}{print $2 "\t" $4}' student.txt #最后执行END
cat /etc/passwd | grep /bin/bash | awk 'BEGIN{FS=":"}{print $1 "\t" $3}' #先执行分隔符,FS内置变量标识":"
cat student.txt | grep -v Name | awk '$4>=70{print $2}' #不看名字,只看第二个字段大于70分的成绩
awk默认以空格或者Tab制表符作为分隔 cut默认以制表符作为分隔
df -h|grep "/dev/sda1"|awk '{print $5}'|cut -d "%" -f 1 // /dev/sda5已用百分比数
1、条件BAGIN表示在所有动作执行前先执行BEGIN后的那个动作
如#df -h awk 'BEGIN{print "test"}{print $1 "\t" $3}'会在最前面输出test
awk在指定分隔符前面一定要加BEGIN
2、条件END表示在所有动作执行后才执行END后的那个动作
如#df -h awk 'END{print "test"}{print $1 "\t" $3}' 会在最后面输出test
3、FS内置变量
如:#cat /etc/passwd grep "/bin/bash" awk 'BEGIN{FS=":"}{print $1 "\t" $3}'
#awk在指定分隔符前面一定要加BEGIN,此例截取第1、3列
#cat student.txt | grep -v Name | awk '$4>=70{print $2}' #此例截取除了列头的成绩大于等于70分的学生姓名,grep -v Name为取反命令,不输出带“Name”的行
FS内置变量
BEGIN 和 END
awk实现截取当前可登录的用户名。
grep "/bin/bash" /etc/passwd | awk BEGIN'{FS=":"}{print $1}'
awk默认以空格或者Tab制表符作为分隔
1、条件BAGIN表示在所有动作执行前先执行BEGIN后的那个动作
如#df -h awk 'BEGIN{print "test"}{print $1 "\t" $3}'会在最前面输出test
awk在指定分隔符前面一定要加BEGIN
2、条件END表示在所有动作执行后才执行END后的那个动作
如#df -h awk 'END{print "test"}{print $1 "\t" $3}' 会在最后面输出test
3、FS内置变量
如:#cat /etc/passwd grep "/bin/bash" awk 'BEGIN{FS=":"}{print $1 "\t" $3}'
#awk在指定分隔符前面一定要加BEGIN,此例截取第1、3列
#cat student.txt grep -v Name awk '$4>=70{print $2}' #此例截取除了列头的成绩大于等于70分的学生姓名,grep -v Name为取反命令,不输出带“Name”的行
FS内置变量
在awk中,一般默认是制表符或者空格作为分隔符,假如说我们想要使用其他的符号作为分隔符,我们可以
awk " {FS=":"}{printf $1 "\t" $3 "\n"}'这样:就变成了分隔符,{FS=":"}意思是这个:分隔符的别名起名为FS。
当我们使用自己定义的分隔符时,一般都在条件前面加上BEGIN,否则第一行读取的数据会识别不了自己定义的分隔符,因此我们应该这样做awk "BEGIN {FS=":"}{printf $1 "\t" $3 "\n"}'
awk 'BEGIN{动作0}条件1{动作1}条件2{动作2}' 表示在所有动作之前先执行动作0,相应的还有END,表示在所有动作执行之后执行动作0。
FS内置变量,用来指定分隔符;
BEGIN可以在执行打印工作之前,首先指明分隔符,以打印出正确结果,例如:cat /etc/passwd|grep "/bin/bash"|awk 'BEGIN{FS=":"}{print $1 "\t" $3}'