原文:http://doc.lazyhack.net/awk.htm
改变 awk 切割字段的方式
echo "1 2*3%4" |awk '{print $1,$2}'
输出结果:1 2*3%4
$1=1 $2=2*3%4
echo "1 2*3%4" |awk -F"[ *%]" '{print $1,$2}'
$1=1 $2=2
字段分隔字符 FS (field seperator) 是awk的内建变量,其默认值是空白及tab.
awk每次切割字段时都会先参考FS 的内容. 故令-F"[ *%]"即FS= "[ *%]",如果有连续多个分隔符可以[ *%]+
处理多行的数据
awk是依照其内建变量 RS(Record Separator) 的定义将文件中的数据分隔成一行一行的Record. RS 的默认值是 "\n"(跳行符号), 故平常awk中一行数据就是一笔 Record. 但有些文件中一笔Record涵盖了多行数据, 这种情况下不能再以 "\n" 来分隔Records. 最常使用的方法是相邻的Records之间改以 一个空白行来隔开.
在awk程序中, 令 RS = ""(空字符串)后, awk把会空白行当成来文件中Record的分隔符. 显然awk对 RS = "" 另有解释方式,简略描述如下, 当 RS = "" 时:数个并邻的空白行, awk仅视成一个单一的Record Saparator. (awk不会于两个紧并的空白行之间读取一笔空的Record)
awk会略过(skip)文件头或文件尾的空白行. 故不会因为这样的空白行,造成awk多读入了二笔空的数据.
张长弓
GNUPLOT 入门
吴国强
Latex 简介
VAST-2 使用手册
mathematic 入门
awk 'BEGIN{RS="";FS="\n"} {print $1,$2,$3,$4}' week.rpt
输出结果:
张长弓 GNUPLOT 入门
吴国强 Latex 简介 VAST-2 使用手册 mathematic 入门
转载于:https://blog.51cto.com/360537539/711743