awk
1.域和记录:
取第一域,并在开头和结尾加字符begin和end
通常使用BEGIN来显示变量和预置变量,使用END来输出最终结果。
awk ' BEGIN {print "being"} {print $1} END {print "end"}' file
2.条件操作符:
第一字域,包含expect,就打印整行
awk '{if($1~/expect/) print $0}' c.sh 或者 awk '$1~/expect/{print $0}' file
精确匹配:,只打印第3 域等于"48"的记录
awk '$3=="48" {print $0}' file
不等于: awk '$1 != "asima"' temp
不匹配: 打印整条不包含ASIMA 的记录
awk '$0 !~ /ASIMA/' temp
小于: awk '{if ($1<$2) print $1 "is smaller"}' temp
设置大小写: awk '/[Gg]reen/' temp 打印整条包含Green,或者green 的记录
任意字符: awk '$1 ~/^...a/' temp 打印第1 域中第四个字符是a 的记录,符号’^’
代表行首,符合’.’代表任意字符
AND 与关系: awk '{if ( $1=="a" && $2=="b" ) print $0}' temp
OR 或关系: awk '{if ($1=="a" || $1=="b") print $0}' temp
for循环
awk -F "," '{for (i=1;i<=NF;i++) if($i~/a=/) {print $i}}'
3.awk内置变量:
例: awk 'END {print NR}' temp 在最后打印已读记录条数
awk '{print NF,NR,$0} END {print FILENAME}' temp
awk '{if (NR>0 && $4~/Brown/) print $0}' temp 至少存在一条记录且包含Brown
NF 的另一用法: echo $PWD | awk -F/ '{print $NF}' 显示当前目录名
4. awk操作符:
在awk 中使用操作符,基本表达式可以划分成数字型、字符串型、变量型、域及数组元素
设置输入域到变量名:
awk '{name=$1;six=$3; if (six=="man") print name " is " six}' temp
域值比较操作:
awk 'BEGIN {BASE="27"} {if ($4
修改数值域取值:(原输入文件不会被改变)
awk '{if ($1=="asima") $6=$6-1;print $1,$6,$7}' temp
修改文本域:
awk '{if ($1=="asima") ($1="desc");print $1}' temp
只显示修改记录:(只显示所需要的,区别上一条命令,注意{})
awk '{if ($1=="asima") {$1="desc";print$1}}' temp
创建新的输出域:
awk '{$4=$3-$2; print $4}' temp
统计列值:
awk '(tot+=$3);END {print tot}' temp 会显示每列的内容
awk '{(tot+=$3)};END {print tot}' temp 只显示最后的结果
awk '{total+=$1}END{print total}' a.txt 只显示最后的结果
文件长度相加:
ls -l|awk '/^[^d]/ {print $8"\t"$5} {tot+=$5} END{print "totKB:" tot}'
只列出文件名:ls -l|awk '{print $9}' 常规情况文件名是第8域
5.awk打印除了第二列外所有列
cat /etc/passwd|awk -F: '{$2=null;print $0}' 就是把某一列制空
6. awk 打印奇数行和偶数行
awk 'NR%2' b.log 打印奇数行
awk '!(NR%2)' b.log 打印偶数行
7. awk多个分隔符进行摘取列
cat file|awk -F[//\ ] '$9 ~/500/ {print $3,$5,$6,$8}' 分隔符分别为/ / 空格