`
chenkangxian
  • 浏览: 87993 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

awk用法

阅读更多

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 < 101 ) Agrade++
 else if ( $3 > 79 ) Bgrade++
 else if ( $3 > 69 ) Cgrade++
 else if ( $3 > 59 ) Dgrade++
 else Fgrade++
}
循环:支持while,for的的标准循环结构及break,continue等。
{
for ( x = 3; x <= NF; x++ )
if ( $x == 0 ) { print "Get next item"; continue}
}
数组:awk的数组是map类型的,索引可以是数字也可是字符串。同时支持多维数组。
awk '{id[NR]=$3};END{for(x = 1; x <= NR; x++) print id[x]}' employees
awk '/^Tom/{name[NR]=$1};END{for(i in name){print name[i]}}' db
awk '{count[$2]++}END{for(name in count)print name,count[name] }' datafile4
split(string,array,FS)  按照分隔符FS将string分成多个域放在array中。

内置函数:
 
(g)sub(regx,string,[tstring])   (在tstring位置处)将regx的第一次(全部)出现替换为string。
index(string,substr)            返回子串的位置
length(string)                  返回字串的长度
substr(string,start,[len])      返回start开始长为len的串
match(string,regx)              返回正则表达式在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 && $2<=15' file 
2、awk '{print NR,NF,$1,$NF}' file 显示文件file的当前记录号、域数和每一行的第一个和最后一个域。 
awk '/101/ {print $1,$2 + 10}' file 显示文件file的匹配行的第一、二个域加10。 
awk '/101/ {print $1$2}' file 
awk '/101/ {print $1 $2}' file 显示文件file的匹配行的第一、二个域,但显示时域中间没有分隔符。 
3、df | awk '$4>1000000 ' 通过管道符获得输入,如:显示第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用法详解

    ### awk用法详解 #### 一、awk简介 awk是一种专为文本处理设计的脚本语言,具有简单、高效的特点。它可以轻松地处理结构化的文本数据,并具备多种内置功能,适用于快速开发各种实用脚本。 #### 二、awk的特点 1....

    sed ,awk用法

    总结,Sed和Awk都是Linux环境中强大的文本处理工具,它们各自有独特的优势,可以互相补充,共同解决复杂的文本处理问题。对于Linux开发者来说,熟练掌握这两个工具的使用,可以大大提高工作效率。

    awk用法小结--有关awk的材料

    ### awk用法小结 #### 一、awk简介与特点 **awk** 是一款非常强大的文本处理工具,尤其适用于处理结构化的文本文件,比如那些按照行和列组织的数据。相较于 **sed**,**awk** 提供了更为丰富的编程功能,能够进行...

    awk用法__都是例子

    示例 1:基本awk用法 awk '/101/' file 显示文件 file 中包含 101 的匹配行。 awk '/101/,/105/' file 显示文件 file 中从包含 101 到包含 105 的所有行。 awk '$1 == 5' file 显示文件 file 中第一个域等于 5 的行...

    AWK用法详解(非常精辟)

    ### AWK用法详解 #### 引言 AWK,作为一种功能强大的文本处理语言,以其独特的设计和灵活性在数据处理领域占据了一席之地。本文旨在深入解析AWK的核心概念、特性及其应用场景,帮助读者理解如何利用AWK高效地处理...

    linux awk用法指南

    Linux AWK 用法指南 AWK 是一种强大的数据处理和文本处理工具,经常用于 Linux 和 Unix 系统中。AWK 的全称是 Aho, Weinberger 和 Kernighan,这三个名字来自三位开发者。AWK 的主要功能是从文件或字符串中基于指定...

    awk用法小结

    ### awk用法小结 本篇文章旨在为初学者提供关于`awk`命令的基本用法介绍。`awk`是一种强大的文本处理工具,在Linux和Unix环境中非常常用。它支持数据的提取、处理以及报告生成等操作。下面我们将根据提供的部分示例...

    awk详细用法小结awk awk

    ### awk详细用法小结 #### 一、awk简介与版本 awk是一种强大的文本分析工具,主要用于Linux/Unix系统下的数据处理与报告生成。它支持正则表达式、模式匹配和复杂的文本处理功能,是系统管理员和程序员进行数据处理...

    linux shell 编程之 awk用法

    ### Linux Shell 编程之 Awk 用法详解 在Linux环境下,Awk是一种强大的文本处理工具,用于处理结构化的数据。Awk不仅能够执行基本的打印操作,还能进行复杂的模式匹配、数据筛选和数学运算,是Linux系统管理员和...

    linux命令--AWK用法简介

    《Linux命令——AWK用法详解》 AWK,一种在Unix/Linux系统中广泛使用的文本处理工具,源自三位杰出的计算机科学家Aho、Weinberg和Kernighan之名。与sed和grep类似,AWK也是一种样式扫描与处理工具,但它在功能上...

    shell命令awk使用方法

    shell命令awk使用方法

    linux bash之 awk用法

    #### Awk的基本使用方法 Awk的基本命令格式如下: ```sh awk [-F var] 'pattern {action}' [filename] ``` 其中: - `-F var` 用于指定字段分隔符,默认为任何空白字符。 - `pattern` 定义了一个模式,只有匹配该...

    awk 用法变量名 含义

    awk '/101/' file 显示文件file中包含101的匹配行。 awk '/101/,/105/' file awk '$1 == 5' file awk '$1 == "CT"' file 注意必须带双引号 awk '$1 * $2 &gt;100 ' file awk '$2 &gt;5 && $2&lt;=15' file

    awk用法简介.doc

    AWK 的基本使用方式有以下几种: 1. 直接在命令行中编写简单程序: ``` awk 'program' input-file1 input-file2 ... ``` 2. 将程序写入文件然后通过 `-f` 选项调用: ``` awk -f program-file input-file1 ...

    windows 下的awk 命令工具

    windows 下的awk 命令工具

    awk用法小结-unix

    默认情况下,awk使用空格或连续的空格作为字段分隔符,但可以通过设置`FS`变量自定义字段分隔符。 在示例 `/etc/passwd` 文件中,每个字段由分号分隔,记录包括用户名、加密密码、用户ID、组ID、注释、家目录和...

    LINUXawk用法[定义].pdf

    以下是 `awk` 的核心概念和用法: 1. **`awk` 基本结构**: `awk` 程序通常由一系列的模式-动作对组成。模式可以是正则表达式,匹配输入行的内容;动作是当模式匹配时执行的命令。例如,`'{ print }'` 模式会打印...

    AWK使用简介.pdf

    ### AWK使用简介 #### 一、AWK概述 AWK是一种专为文本处理而设计的编程语言,广泛应用于Linux/Unix环境中。它能够高效地处理来自标准输入、单个或多个文件,甚至其他命令输出的数据。作为一种强大的编程工具,AWK...

    unix之AWK使用小解

    ### Unix之AWK使用详解 #### 一、AWK简介 AWK是一种强大的文本处理工具,在Unix和类Unix操作系统中广泛使用。它不仅能够高效地处理数据,还具备一定的编程能力,可以用来编写复杂的脚本。 #### 二、基本语法与...

Global site tag (gtag.js) - Google Analytics