赞
踩
awk [-F value] [-v var=value] 'program text' [files....]例如:
awk [-F value] [-v var=value] -f program-file [files....]
[alex@alexon:~]$awk '{print}' persons.txt
1011, Alex Perkins, Product, Software Developer
3923, Jimmey Mills, Operation, COO
23934, Kevin Kim, Management, CEO
2321, Chris Paul, UI, Designer
又见cat,呵呵. 更有意义一点的:
[alex@alexon:~]$awk -F , -v OFS=: '{print $1, $2, $3, $4}' persons.txt
1011: Alex Perkins: Product: Software Developer
3923: Jimmey Mills: Operation: COO
23934: Kevin Kim: Management: CEO
2321: Chris Paul: UI: Designer
awk能识别文本的结构,还能格式化输出.
BEGIN {actions} /pattern/ {actions} END {actions}BEGIN是处理文件之前执行的. 中间的叫Body loop.后面的END是处理完结束后执行.
BEGIN {action} \如果写在文件中,则可以像写C语言那样写
/pattern {action} \
END {action}
program-file.awk:
BEGIN {
actions;
}
/pattern/ {
actions;
}
END {
actions;
}
FS -- Field Separator 域的分隔符,默认的是以空白符分隔利用这些内置变量,AWK读入文本后就可以对文本进行处理,以达到分解结构化文本的目的:把输入变成一个Table形式的结构化信息.
RS -- Record Separator 记录的分隔符,默认是以换行符来分隔
FILENAME -- current filename
NF -- Number of Feilds in current record
NR -- Number of Record 输入的记录数,相当于行号一样,多个文件时会接着递增.
FNR -- File Number of Record 输入的当前记录数,每个文件单独计算
$0 -- the whole record 当前整个记录
$n -- the nth field of the current record 当前记录和第n个域
OFS -- Ouput Field Separator 输出时的域分隔符
ORS -- Output Record Separator 输出时的记录分隔符
以字串形式输出,后面的每个变量都当成是字串.当以逗号分隔时,就用OFS来分隔域,如果以空格分隔时,就以空格来作为OFS:
[alex@alexon:~]$awk -F, 'BEGIN {OFS=";"} {print $1,$2,$3,$4}' persons.txt
1011; Alex Perkins; Product; Software Developer
3923; Jimmey Mills; Operation; COO
23934; Kevin Kim; Management; CEO
2321; Chris Paul; UI; Designer
[alex@alexon:~]$awk -F, 'BEGIN {OFS=";"} {print $1 $2 $3 $4}' persons.txt
1011 Alex Perkins Product Software Developer
3923 Jimmey Mills Operation COO
23934 Kevin Kim Management CEO
2321 Chris Paul UI Designer
print不跟参数时,输出当前的记录.
可以进行与C语言十分类似的格式化输出.
[alex@alexon:~]$awk -F, 'BEGIN {OFS=";"} {printf "%d: ", NR; print $1,$2,$3,$4}' persons.txt
1: 1011; Alex Perkins; Product; Software Developer
2: 3923; Jimmey Mills; Operation; COO
3: 23934; Kevin Kim; Management; CEO
4: 2321; Chris Paul; UI; Designer
^ --- 行首
$ ----行尾
. ----任意非换行符'\n'符
\b ---- 一个单词结尾,单词定义为一连串的字母或数字,可以单独放在一端,也可放二端.
* --- 0或1个或多个
+ --- 1个或多个
? --- 0或1
{m} --- 出现m次
{m,n} --- 出现m次到n次,如{1,5}表示出现1次到5次不等(1,2,3,4,5次)
\ --- 可以转义特殊字符
[] ---其内的任意字符
[^] --- 匹配任何不在此字符集中的字符
| ---- 或操作,abc\|123匹配123或者abc
(...) ----组合,形成一个组,主要用于索引
\n ---- 前面第n个组合, /123 \1/ 则匹配123123
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。