Blog

Viewing posts from May, 2011

awk 简易手册

语法格式

awk 'pattern' file
awk '{action}' file
awk 'pattern {acction}' file

内建变量

符号 说明 默认值
ARGC 命令行变量个数
ARGV 命令行变量数组
FILENAME 当前输入文件名
FNR 当前文件中的记录号
FS 输入域分隔符 空格
RS 输入记录分割符 回车
NF 当前记录里域个数
NR 到目前为止记录数(行号)
OFS 输出域分隔符 空格
ORS 输出记录分隔符 回车
$0 整条记录
$n 记录的第N个区域

全文匹配

awk '/101/' file                    # 匹配字符串所在行
awk '/101/,/105/' file              # 匹配两个字符串之间的所有行

域匹配

awk '$3 == 5245' file               # 匹配数字
awk '$4 > 1000' file
awk '$1 * $2 >100' file
awk '$2 >5 && $2<=15' file
awk '$1 == "CT"' file               # 匹配字符串
awk '$2 ~ /Adm/' file               # 匹配正则表达式
awk '$2 !~ /Adm/' file 

打印输出

awk '{print NR,NF,$1}' file        # 打印文件的当前记录号、域数和每一行的第一个域
awk '{print $NF}' file             # 打印文件的每一行的最后一个域
awk '{print "Month: " $2 "\nYear: ", $6}' file      # 打印格式化内容
awk '/101/ {print $1,$2 + 10}' file     # 打印匹配条件的每一行的第一、二个域加10
awk '/101/ {print $1 $2}' file          # 打印时每个域中间没有分隔符

值域处理

awk '{$1 == 'Chi' {$3 = 'China'; print}' file   # 找到匹配行后先将第3个域替换后再显示该行(记录)。
awk '{$7 %= 3; print $7}'  file               #将第7域被3除,并将余数赋给第7域再打印。

把file1、file2、file3的文件内容全部写到fileall中,格式为打印文件并前置文件名。