对于每个输入行,awk 都会执行每个脚本代码块一次。
BEGIN(处理文件前的 action,常包含 FS、OFS 等) 、END(处理文件后的 action)。
常用内部变量:
NR(当前行数)
NF(字段总数)
$0(当前整行)
$1(第一个记录)
FS(字段分隔符,默认为一个空格)
OFS(输出字段分隔符)
ORS(输出记录分隔符)
常用操作:
"=="、"<"、">"、"<="、">=" 和 "!="
"~"匹配 和 "!~"不匹配
"||"(逻辑与)和 "&&"(逻辑或)
示例:
awk '/[0-9]/' data.txt 打印记录中任意列包含数字 0-9 的行
awk '/01/||/02/' data.txt 打印包含 01 或者 02 的行
awk '/01/,/02/' data.txt 打印既包含 01 又包含 02 的行;等同 awk ‘/01/&&/02’
awk '$1==1001 {print $2}' data.txt 打印符合第一列等于 1001 的第二列
awk '$2=="Steven" {print}' data.txt 打印符合第二列等于 Steven 的那些行,注意必须带双引号
awk '$3>20 && $3<30' data.txt 打印第三列在 20 到 30 之间的那些行
awk '$6~/01/ {print $2}' data.txt 打印符合仅仅第六列里包含 01 那些行的第二列
awk 'NR>3 {print $1,$2}' data.txt 从第四行才开始打印第一列和第二列
awk –F"+" '{print $1}' data.txt 按+为分隔符来分隔列,并打印第一列
awk 'BEGIN{FS="\t"} {print $6,$7,$8,$9}' data.txt 按\t为分割符
awk '{if($1>1002) print $2; else print $3}' data.txt 若第二列大于 1002 就打印第二列,否则打印第三列
awk 'BEGIN{FS="\t";OFS="\t"} {if($12==5) print $0}'
BEGIN(处理文件前的 action,常包含 FS、OFS 等) 、END(处理文件后的 action)。
常用内部变量:
NR(当前行数)
NF(字段总数)
$0(当前整行)
$1(第一个记录)
FS(字段分隔符,默认为一个空格)
OFS(输出字段分隔符)
ORS(输出记录分隔符)
常用操作:
"=="、"<"、">"、"<="、">=" 和 "!="
"~"匹配 和 "!~"不匹配
"||"(逻辑与)和 "&&"(逻辑或)
示例:
awk '/[0-9]/' data.txt 打印记录中任意列包含数字 0-9 的行
awk '/01/||/02/' data.txt 打印包含 01 或者 02 的行
awk '/01/,/02/' data.txt 打印既包含 01 又包含 02 的行;等同 awk ‘/01/&&/02’
awk '$1==1001 {print $2}' data.txt 打印符合第一列等于 1001 的第二列
awk '$2=="Steven" {print}' data.txt 打印符合第二列等于 Steven 的那些行,注意必须带双引号
awk '$3>20 && $3<30' data.txt 打印第三列在 20 到 30 之间的那些行
awk '$6~/01/ {print $2}' data.txt 打印符合仅仅第六列里包含 01 那些行的第二列
awk 'NR>3 {print $1,$2}' data.txt 从第四行才开始打印第一列和第二列
awk –F"+" '{print $1}' data.txt 按+为分隔符来分隔列,并打印第一列
awk 'BEGIN{FS="\t"} {print $6,$7,$8,$9}' data.txt 按\t为分割符
awk '{if($1>1002) print $2; else print $3}' data.txt 若第二列大于 1002 就打印第二列,否则打印第三列
awk 'BEGIN{FS="\t";OFS="\t"} {if($12==5) print $0}'
awk -F":" '{print $1}' /etc/passwd 按照:进行分割,并输出分割后的第一个值;
awk -F":" '{print $1 $3}' /etc/passwd 按照:进行分割,输出分割后的第1个值及第3个值,值与值之间是相连的。
awk -F":" '{print $1" "$3}' /etc/passwd 按照:进行分割,输出分割后的第1个值及第3个值,而且值与值之前有空格分隔。
awk -F":" '{print "username:" $1 "\tuid:"$3}' /etc/passwd 按照:进行分隔,输出第1个值及第3个值,在输出时加入一些内容。
awk '{print NF}' /etc/passwd 输出该文本中所包含的每条记录按空格分割后的字段数量。