截取文档中的某段
awk -F ‘:‘ ‘{print $1}‘ 1.txt
使用自定义字符连接每个段
awk -F ‘:‘ ‘{print $1"#"$2"#"$3"#"$4}‘ 1.txt
或者使用awk内部变量OFS,awk -F ‘:‘ ‘{OFS="#"} {print $1,$2,$3,$4}‘ 1.txt
匹配字符或字符串
awk ‘/oo/‘ 1.txt
针对某个段匹配
awk -F ‘:‘ ‘$1~/oo/‘ 1.txt
多次匹配
awk -F ‘:‘ ‘/root/ {print $1,$3};$1~/test/;$3~/20/‘ 1.txt
第三段为0
awk -F ‘:‘ ‘$3+=="0" 1.txt
第三段大于等于500
awk -F ‘:‘ ‘$3>=500‘ 1.txt
第七段不是’/sbin/nologin‘
awk -F ‘:‘ ‘$7!="/sbin/nologin"‘ 1.txt
第三段小于第四段
awk -F ‘:‘ ‘$3<=$4‘ 1.txt
第三段大于5,并且第三段小于7
awk -F ‘:‘ ‘$3>5&&$3<7‘ 1.txt
第三段大于5或者第七段为‘/bin/bash’
awk -F ‘:‘ ‘$3>"5"||$7=="/bin/bash"‘ 1.txt
awk内置变量 NF(段数) NR(行数)
head -n3 1.txt|awk -F ‘:‘ ‘{print NF}‘ #打印最后一个
打印20行以后的行
awk ‘NR>20‘ 1.txt
打印20行以后并且第一段包含ssh的行
awk -F ‘:‘ ‘NR>20&&$1~/ssh/‘ 1.txt
更改某个段的值
awk -F ‘:‘ ‘$1="root"‘ 1.txt
数学计算,把第三段和第四段值相加,并赋予第七段
awk -F ‘:‘ ‘{$7=$3+$4;print $0}‘ 1.txt
这样相当于改变了原来文本的结构,所以print$0 的时候就不再有分隔符显示,想显示分隔符就要用OFS
awk -F ‘:‘ ‘{OFS=";"} {$7=$3+$4;print $0}; 1.txt
计算第三段总和
awk -F ‘:‘ ‘{(tot=tot+$3)};END {print tot}‘ 1.txt
awk中使用if
awk -F ‘:‘ ‘{if($1=="root") print $0}‘ 1.txt
awk用print打印单引号
awk ‘{print "This is a ‘"‘‘"‘”$1}‘ filename
#在awk中,使用脱意字符\是不起作用的,如果想打印特殊字符,只能使用‘""‘这样的组合才可以。从左至右为单引号,双引号,双引号,单引号,例如想脱意$就是’“$"‘
把两个文件中同一行的内容一起打印出来
awk ‘NR==FNR{a[$1]=$2}NR>FNR{print $0,a[$1]}‘ 1.txt 2.txt
或者pasete txt1 txt2 #如果想用指定的字符连接,可以用-d来指定 paste -d ‘+‘ 1.txt 2.txt
#NR表示读取的行数,FNR表示读取的当前行数,当NR==FNR就表示读取1.txt文件,当NR>FNR表示读取2.txt,数组a相当于一个map
awk用法
原文:http://blog.51cto.com/10941098/2136881