awk用法
通用格式:awk 'pattern {action}' file
cmd | awk 'pattern {action}'
如果没有pattern,则对所有行都采用action,如果没有action,则打印匹配行。在pattern中可以使用各种定义的变量$0,,NF,NR等.
工作原理:awk 扫描一行,放入变量$0中,然后行被分隔成各个域,以指定的分隔符进行分离,默认为空格,可以通过参数FS指定。各个域都存于变量$i中,至多100个域。
awk -F : '{print $1}' /etc/passwd 打印所有用户名
格式化输出:
print 支持使用转义字符,及OFMT变量定义的输出数字格式
awk '/Sally/{print "\t\tHave a nice day, " $1, $2 "\!"}' employees
awk 'BEGIN{OFMT="%.2f"; print 1.2456789, 12E 2}'
printf支持C语言同名函数的所有功能
echo "UNIX" | awk ' {printf "|%-15s|\n", $1}'
awk '{printf "The name is: %-15s ID is %8d\n", $1, $3}' employees
域分隔符:
awk F'[ :\t]' '{print $1, $2, $3}' employees
pattern:
模式可以是以下任意一个:
(1) /正则表达式/:使用通配符的扩展集。
(2) 关系表达式:可以用下面运算符表中的关系运算符进行操作,可以是字符串或数字的比较,如$2>%1选择第二个字段比第一个字段长的行。
模式匹配表达式:用运算符~(匹配)和~!(不匹配)。用来在记录或者域内匹配正则表达式。如$ awk '$1 ~/^root/' test将显示test文件第一列中以root开头的行。
BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。
END:让用户在最后一条输入记录被读取之后发生的动作。
Action
{}中的Action的极其类似C语言的子句,里面可以嵌套子句,可以使用条件、循环、支持变量函数定义、使用自定义或内部变量、内部函数,调用系统命令,输入输出重定向等强大的能力。
变量:var=value,若变量没有初始化,字符串为"",数字为0。
awk '$1 ~ /Tom/ {wage = $2 * $3; print wage}' filename
内置变量:
ARGC Number of command-line argument
ARGIND Index in ARGV of the current file being processed from the command line (awk only)
ARGV Array of command-line arguments
CONVFMT Conversion format for numbers, %.6g, by default (awk only)
ENVIRON An array containing the values of the current environment variables passed in from the shell
ERRNO Contains a string describing a system error occurring from redirection when reading from the getline function or when using the close function (awk only)
FIELDWIDTHS A whitespace-separated list of fieldwidths used instead of FS when splitting records of fixed fieldwidth (awk only)
FILENAME Name of current input file
FNR Record number in current file
FS The input field separator, by default a space
IGNORECASE Turns off case sensitivity in regular expressions and string operations (awk only)
NF 当前记录的域个数,$NF可以引用到最后一个域
NR 当前的记录序号
OFMT Output format for numbers
OFS Output field separator
ORS Output record separator
RLENGTH Length of string matched by match function
R S Input record separator
RSTART Offset of string matched by match function
RT The record terminator; awk sets it to the input text that matched the character or regex specified by RS
SUBSEP Subscript separator
BEGIN模式后跟的ACTION,表示在awk处理文本以前进行的动作,可以用来初始化各种内部变量,或其他动作。
END 模式后跟的ACTION,表示在awk处理结束后进行的动作。
重定向:
awk '$4 >= 70 {print $1, $2 > "passing_file" }' filename
awk 'BEGIN{while("ls" | getline) print}'
条件语句
{if ( $3 > 89 && $3 79 ) Bgrade++
else if ( $3 > 69 ) Cgrade++
else if ( $3 > 59 ) Dgrade++
else Fgrade++
}
循环:支持while,for的的标准循环结构及break,continue等。
{
for ( x = 3; x 正则表达式在string中的匹配位置
sprintf() 返回指定格式的串
awk '{line = sprintf ( "% 15s %6.2f ", $1 , $3 ); print line}' filename
sin cos exp int log rand atan2 sqrt srand等
求子串经常用来格式化具有固定长但没有分隔符的域。而gsub通常用来替换某些无用的字符,使用替换后字符串更有意义。
自定义函数:
function name ( parameter, parameter, parameter, ... )
{
statements
return expression
}
常用awk用法举例:
1、awk '/101/' file 显示文件file中包含101的匹配行。
awk '/101/,/105/' file /pattern1/,/pattern2/ 显示两个匹配模式之间的行。在awk和sed下,如果模式2(pattern2)不出现,会显示匹配pattern1的所有行.
awk '$1 == 5' file
awk '$1 == "CT"' file 注意必须带双引号
awk '$1 * $2 >100 ' file
awk '$2 >5 && $21000000 ' 通过管道符获得输入,如:显示第4个域满足条件的行。
4、awk -F "|" '{print $1}' file 按照新的分隔符"|"进行操作。
awk 'BEGIN { FS="[: \t|]" }
{print $1,$2,$3}' file 通过设置输入分隔符(FS="[: \t|]")修改输入分隔符。
注:awk 缺省域分隔符是空格或TAB
Sep="|"
awk -F $Sep '{print $1}' file 按照环境变量Sep的值做为分隔符。
awk -F '[ :\t|]' '{print $1}' file 按照正则表达式的值做为分隔符,这里代表空格、:、TAB、|同时做为分隔符。
awk -F '[][]' '{print $1}' file 按照正则表达式的值做为分隔符,这里代表[、]
5、awk -f awkfile file 通过文件awkfile的内容依次进行控制。
cat awkfile
/101/{print "\047 Hello! \047"} --遇到匹配行以后打印 ' Hello! '.\047代表单引号。
{print $1,$2} --因为没有模式控制,打印每一行的前两个域。
6、awk '$1 ~ /101/ {print $1}' file 显示文件中第一个域匹配101的行(记录)。
7、awk 'BEGIN { OFS="%"}
{print $1,$2}' file 通过设置输出分隔符(OFS="%")修改输出格式。
8、awk 'BEGIN { max=100 ;print "max=" max} BEGIN 表示在处理任意行之前进行的操作。
{max=($1 >max ?$1:max); print $1,"Now max is "max}' file 取得文件第一个域的最大值。
(表达式1?表达式2:表达式3 相当于:
if (表达式1)
表达式2
else
表达式3
awk '{print ($1>4 ? "high "$1: "low "$1)}' file
9、awk '$1 * $2 >100 {print $1}' file 显示文件中第一个域匹配101的行(记录)。
10、awk '{$1 == 'Chi' {$3 = 'China'; print}' file 找到匹配行后先将第3个域替换后再显示该行(记录)。
awk '{$7 %= 3; print $7}' file 将第7域被3除,并将余数赋给第7域再打印。
11、awk '/tom/ {wage=$2+$3; printf wage}' file 找到匹配行后为变量wage赋值并打印该变量。
12、awk '/tom/ {count++;}
END {print "tom was found "count" times"}' file END表示在所有输入行处理完后进行处理。
13、awk 'gsub(/\$/,"");gsub(/,/,""); cost+=$4;
END {print "The total is $" cost>"filename"}' file gsub函数用空串替换$和,再将结果输出到filename中。
1 2 3 $1,200.00
1 2 3 $2,300.00
1 2 3 $4,000.00
发表评论
-
awk数组下标的字符串化
2012-07-06 09:52 576 好好努力,有一个好的将来! ... -
flex中给图片(或任意组件)着色的方法
2012-07-03 13:44 542作者:屈剑峰 2011年4月3日 在fl ... -
PHP作为Flex程序的数据源
2012-07-02 13:27 639Adobe Flash Builder 4 简体中文正式版 ... -
Flex 拖拽范例
2012-07-02 13:26 617Flex由于在其Framwork里加入了DragDrop管 ... -
java与flex通信
2012-07-02 13:26 584一、准备: ... -
Flex中button按钮的例子
2012-07-02 13:26 405本源代码来源于flex完全自学手册 flex/spark ... -
FLEX ComboBox绑定JAVA返回的数据源
2012-07-02 13:26 613万万没有想到会在一个小小的ComboBox上碰这么大钉子, ... -
使用Validator.validateAll对所有验证控件进行验证的例子
2012-07-01 10:54 814调用 validators 数组中的所有验证程序。返回一个 ... -
C#命名规范
2012-07-01 10:53 753本文的结构为:(1)C ... -
Using the Microphone capabilities in Adobe AIR 2
2012-07-01 10:53 660AIR 2 introduces the ability ... -
ActionScript 3.0综合应用案例(图像识别+位图滤镜+Molehill)
2012-07-01 10:53 729本文是对ActionScript 3.0的一个综合应用案例 ... -
Using the Adobe AIR 2 NativeProcess API to create a screen recorder
2012-07-01 10:53 1527With the release of AIR 2, Ad ... -
采用数据库为Flex Tree组件的提供数据-Java与LCDS
2012-06-30 17:15 638采用数据库为Flex Tree组件的提供数据-Java与LCD ... -
Flex air 中调用com组件的方法
2012-06-30 17:15 774Flex air 中调用com组件的方法 2011年03月3 ... -
Flex4 在组件Component中注册事件Event并进行指派dispatch的例子
2012-06-30 17:15 718Flex4 在组件Component中注册事件Event并进行 ... -
flex中给图片(或任意组件)着色的方法
2012-06-30 17:15 547flex中给图片(或任意组件)着色的方法 2011年04月0 ... -
采用数据库为Flex Tree组件的提供数据-FlexTree组件
2012-06-30 17:15 581采用数据库为Flex Tree组件的提供数据-FlexTree ...
相关推荐
sed,awk用法,sed,awk是linux开发必备知识,公司常用技术,很好很强大的sed和awk用法介绍,绝对值得您收藏学习。好资源大家一起分享!
awk ‘/101/’ file 显示文件file中包含101的匹配行。 awk ‘/101/,/105/’ file awk ‘$1 == 5′ file awk ‘$1 == “CT”‘ file 注意必须带双引号 awk ‘$1 * $2 >100 ‘ file awk ‘$2 >5 && $2<=15' file
awk用法小结 - - - by ruson 2006.4 NTU 1. awk非常适合于结构化的文本文件(行、列数据)复杂处理。相对于sed而言,它可进行复杂的编程处理,并且可以产生复杂的报表输出。 2. awk通常有三个版本,旧awk、nawk...
awk用法__都是例子 awk用法__都是例子 awk用法__都是例子 awk用法__都是例子
使用awk 撰写程序比起使用其它语言更简洁便利且节省时间. awk 还具有一些 内建功能, 使得awk 擅于处理具数据行(Record), 字段(Field) 型态的资料; 此外, awk 内建有pipe 的功能, 可将处理中的数据传送给外部的Shell...
AWK用法详解(非常精辟) AWK用法详解(非常精辟)
shell命令awk使用方法
awk用法小结,介绍了基本的awk的用法,对于新手还是很有参考价值的
linux命令 AWK 用法 介绍了awk命令的一些简单用法
因为遇到了awk问题,所以找到这个小结,共享一下
linux bash 之awk,awk的详尽用法
一本很好的介绍awk用法的书,初学者可以试试拿去看看
awk '/101/' file 显示文件file中包含101的匹配行。 awk '/101/,/105/' file awk '$1 == 5' file awk '$1 == "CT"' file 注意必须带双引号 awk '$1 * $2 >100 ' file awk '$2 >5 && $2<=15' file
LINUXawk用法[定义].pdf
linux shell 编程之 awk详细用法
windows 下的awk 命令工具
本文详细介绍了awk的用法,awk非常强大,希望对大家有用
UNIX下AWK语法小结,新手适合看看。。。。。。。。
AWK使用简介.pdf AWK使用简介.pdf AWK使用简介.pdf AWK使用简介.pdf