每天三分钟搞定linux shell脚本(46) gawk来了!!!gawk中分隔符内建变量

gawk中分隔符内建变量

在这里插入图片描述
内建变量值得是shell中已经定义过可以直接使用的变量,shell中用于分割作用的内建变量有5个,之前已经提到过一个FSFS是输入字段的分隔符,除了FS还有FIELDWIDTHOFS,RS,ORS
比如文件data的内容为:

This is Fruit:apple
That is City:Beijing
These are books:maths
Those are animals:dogs

1 OFS对输出进行分割

默认情况下,对输出进行分割的是空格。当然如果设置OFS的话,那么就能修改输出分隔符了,比如输入:

gawk 'BEGIN {FS=":";OFS="<--->"} {print $1,$2}' data

运行后结果为:

This is Fruit<--->apple
That is City<--->Beijing
These are books<--->maths
Those are animals<--->dogs

如上所示,在BEGIN里面把输入分隔符输出分隔符都改了。

2 FIELDWIDTHS按宽度取出数据

FIELDWIDTHS设定之后,gawk根据输入的数字,在输入的一行中,去截取对应的长度,同时FIELDWIDTHS设定之后FS就不起作用了。比如对于文本data的数据为:

This is Fruit:apple
That is City:Beijing
These are books:maths
Those are animals:dogs

输入:

gawk 'BEGIN{FIELDWIDTHS="4 1 2 1 5 6";OFS="<--->"} {print $1,$3,$5,$6}' data

运行后结果为:

This<--->is<--->Fruit<--->:apple
That<--->is<--->City:<--->Beijin
Thes<---> a<--->e boo<--->ks:mat
Thos<---> a<--->e ani<--->mals:d

3 RS作为输入记录的分隔符

默认情况下,RS为换行符,也就说对于一个文本,每一行就是一个新的记录。之前的比如$1,$2这种都是对一个记录去处理的。有时候我们希望多行数据为一个记录的时候,可以修改RS的值。比如有一个文本data2的内容为:

Fan wei
China Beijing
Male
Actor

Ji Xiao Lan
Qing Beijing
Male
Guan

以上内容实际上是两段,现在想要把一段当成一个整体,并且整段中的每一行当做一个数据段。这里只要把FS设置为换行符\n,并把RS设置成空行。输入如下:

gawk 'BEGIN{FS="\n"; RS=""} {print $1,$2}' data3

运行后结果为:

Fan wei China Beijing
Ji Xiao Lan Qing Beijing

4 ORS作为输出记录的分隔符

同理,ORS作为输出记录的分隔符,默认也是换行符\n。当然也可以修改这个变量,输入:

gawk 'BEGIN{FS="\n"; RS="";ORS="<>\n"} {print $1,$2}' data3

data3的内容为:

Fan wei
China Beijing
Male
Actor

Ji Xiao Lan
Qing Beijing
Male
Guan

运行后结果为:

Fan wei China Beijing<>
Ji Xiao Lan Qing Beijing<>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涤除而玄览

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值