GAWK 手册(三)第三章 读取输入档案 gawk的输入可以从标准输入或指定的档案里读取。输入的读取单位被称为”记录”(records),gawk 在做处理时,是一个记录一个记 (p9 of 46) 录地处理。每个记录的内定值是一行(line),一个记录又被分为多个栏位(fields)。 3.1 如何将输入分解成记录(records) gawk 语言会把输入分解成记录(record)。记录与记录之间是以 record separator 隔开,record separator 的内定值是表示新一行的 字元(newline character),因此内定的 record separator 使得文字的每一行是一个记录。 record separator 随著内建变数 RS 的改变而改变。RS 是一个字串, 它的内定值是" "。仅有 RS 的第一个字元是有效的,它被当作 record separator,而 RS 的其它字元会被忽略。 内建变数 FNR 会储存目前的输入档案已颈欢寥〉募锹贾鍪D 建变数 NR 会储存目前为止所有的输入档案已颈欢寥〉募锹贾鍪 3.2 栏位(field) gawk 会自动将每个记录分解成多个栏位 (field)。类似於字在一行里面,gawk 的内定动作会认为栏位之间是以 whitespace 分开。在gawk 里,whitespace 的意思是一个或多个空白或 tabs。 在 gawk 程式里面,以'$1'表示第一个栏位,'$2'表示第二个栏位 ,依此类推。举个例子,假设输入的一行如下所示:
第一个栏位或 $1 是'This',第二个栏位或 $2 是 'seems',依此类推。 有个地方值得特别注意,第七个栏位或 $7 是'example.'而非'example'。 不论有多少栏位,$NF 可用来表示一个记录的最後一个栏位。以上面的例子为例,$NF 与 $7 相同,也就是'example.'。 NF 是一个内建变数,它的值表示目前这个记录之栏位的个数。 $0,看起来好像是第零个栏位,它是一个特例,它表示整个记录。 下面是一个较复杂的例子:
结果如下:
这个例子是把输入档'BBS-list'的每个记录的第一个栏位作检查,如果它含有子字串'foo',则这一个记录会被印出。 3.3 如何将记录分解成栏位 gawk 根据 field separator 将一个记录分解成栏位。field sepa- rator 以内建变数 FS 表示。 举个例子,假如 field separator 是'oo',则下面的行:
会被分成三个栏位:'m'、' g'、' gai pan'。 在 gawk 程式里,可以使用'='来改变 FS 的值。例如:
输入行如下:
执行gawk的结果将印出字串 ' 29 Oak St.'。BEGIN 後面的 action 会在第一个记录被读取之前执行一次。 上一篇:GAWK 手册(二) 下一篇:GAWK 手册(四) 更多相关文章
|
推荐文章
精彩文章
|