AWK学习笔记(1)

l 简介

AWK是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。

l 语法

         awk '{pattern + action}' {filenames}

其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。{}不需要在程序中始终出现,但它们用于根据特定的模式对一系列

指令进行分组。

 

         练习内容如下,AWK会将所有字段按$1,$2,$3……进行划分,理论上不限字段大小,全部字段被定义为$0

ID

COUNTRY

FIRST_NAME

LAST_NAME

JOB_ID

SALARY

43091

USA

Donald

OConnell

SH_CLERK

2600

43092

China

Douglas

Grant

SH_CLERK

2600

43093

Japan

Jennifer

Whalen

AD_ASST

4400

43094

Germany

Michael

Hartstein

MK_MAN

13000

43095

France

Pat

Fay

MK_REP

6000

43096

UK

Susan

Mavris

HR_REP

6500

43097

Italy

Hermann

Baer

PR_REP

10000

43098

Brazil

SHELL

Higgins

AC_MGR

12000

43099

Canada

William

Gietz

AC_ACCOUNT

8300

43100

Russia

Steven

King

AD_PRES

24000

43101

India

Neena

Kochhar

AD_VP

17000

43102

Spain

Lex

De Haan

AD_VP

17000

 

l 示例

1、 简单查询

 

[root@linux ~]# cat list.txt  | awk '{ print $0}'

# 或者awk '{ print $0}' list.txt

43091   USA    Donald  OConnell        SH_CLERK        2600

43092   China                   Douglas Grant   SH_CLERK        2600

43093   Japan    Jennifer        Whalen  AD_ASST 4400

43094   Germany Michael Hartstein       MK_MAN  13000

43095   France   Pat     Fay     MK_REP  6000

43096   UK   Susan   Mavris  HR_REP  6500

43097   Italy    Hermann Baer    PR_REP  10000

43098   Brazil   SHELL Higgins AC_MGR  12000

43099   Canada   William Gietz   AC_ACCOUNT      8300

43100   Russia   Steven  King    AD_PRES 24000

43101   India    Neena   Kochhar AD_VP   17000

43102   Spain    Lex     De Haan AD_VP   17000

 

[root@linux ~]# cat list.txt  | awk '{ print $1,$2,$3}'

# 或者awk '{ print $1,$2,$3}' list.txt

43091 USA

43092 China Douglas

43093 Japan Jennifer

43094 Germany Michael

43095 France Pat

43096 UK Susan

43097 Italy Hermann

43098 Brazil SHELL

43099 Canada William

43100 Russia Steven

43101 India Neena

43102 Spain Lex

 

2、 简单过滤

[root@linux ~]# awk '/REP/' list.txt

# 单条件过滤,过滤含REP的内容。

43095   France   Pat     Fay     MK_REP  6000

43096   UK       Susan   Mavris  HR_REP  6500

43097   Italy    Hermann Baer    PR_REP  10000

 

[root@linux ~]# awk '/REP|VP/' list.txt

# 过滤含REPVP的内容

43095   France   Pat     Fay     MK_REP  6000

43096   UK       Susan   Mavris  HR_REP  6500

43097   Italy    Hermann Baer    PR_REP  10000

43101   India    Neena   Kochhar AD_VP   17000

43102   Spain    Lex     De Haan AD_VP   17000

 

[root@linux ~]# awk '/REP|VP/ { print $2,$3,$4; print $5,$1}' list.txt

# ;号换行输出

France Pat Fay

MK_REP 43095

UK Susan Mavris

HR_REP 43096

Italy Hermann Baer

PR_REP 43097

India Neena Kochhar

AD_VP 43101

Spain Lex De

Haan 43102

 

[root@linux ~]# awk '/REP|VP/ { print $2,$3,$4; print $5":"$1"\n"}' list.txt

# ;号换行输出,增加换行。Shell下的\t(制表)\r(回车)\n(换行)等都可以awk中使用。

France Pat Fay

MK_REP:43095

 

UK Susan Mavris

HR_REP:43096

 

Italy Hermann Baer

PR_REP:43097

 

India Neena Kochhar

AD_VP:43101

 

Spain Lex De

Haan:43102

 

3、 复杂查询

[root@linux ~]# awk '/SH/' list.txt

#此处预查询JOB_ID43098记录非查询结果。此处可以使用~进行精确过滤。

43091   USA      Donald  OConnell        SH_CLERK        2600

43092   China    Douglas Grant   SH_CLERK        2600

43098   Brazil   SHELL   Higgins AC_MGR  12000

 

[root@linux ~]# awk '$5 ~ /SH/' list.txt

# ~ 对第5列进行匹配

43091   USA      Donald  OConnell        SH_CLERK        2600

43092   China    Douglas Grant   SH_CLERK        2600

 

4、 OFS变量

[root@linux ~]# awk -F: '{ print $1}' /etc/passwd

# -F指定字段间分隔符

root

bin

daemon

adm

lp

sync

shutdown

halt

mail

news

uucp

operator

games

gopher

ftp

你可能感兴趣的:(linux,shell,职场,awk,休闲)