awk用法ITeye - 千亿集团

awk用法ITeye

2019年03月01日13时17分45秒 | 作者: 运鸿 | 标签: 匹配,分隔符,变量 | 浏览: 2056

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

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表千亿集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    awk用法ITeye

    匹配,分隔符,变量
  • 2
  • 3
  • 4

    没什么ITeye

    体系,计算机,办理
  • 5
  • 6

    (三)apache装置ITeye

    装置,装备,修正
  • 7

    (三)apache装置ITeye

    装置,装备,修正
  • 8
  • 9
  • 10

    转:scp使用说明ITeye

    指令,机器,用户