截取文档中的某段
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://www.bubuko.com/infodetail-2673378.html