记用AWK进行for循环查询文本时候的问题

今天刚刚接触awk,就想着来实验一下,当学到for循环的时候,我就简单的操作了一下

1.txt 文本如下

1 haha  heihei  houhou
2 yannie2 yannie3 yannie4
3 hilary2 hilary3 hilary4
4 czl2 czl3 czl4
5 wo2 shi3 ni4

当用按以下方法写能输出

awk '{ for(i = 0;i<5;i++) print $i }' 1.txt

输出结果为:

1 haha  heihei  houhou
1
haha
heihei
houhou
2 yannie2 yannie3 yannie4
2
yannie2
yannie3
yannie4
3 hilary2 hilary3 hilary4
3
hilary2
hilary3
hilary4
4 czl2 czl3 czl4
4
czl2
czl3
czl4
5 wo2 shi3 ni4
5
wo2
shi3
ni4

即先输出$0,即当前行文本内容 然后输出$1 这一行第一列的内容,以此类推,输出没有问题,由于其默认以空格为分隔符,要想设置以回车为分隔符的话,可以用-F选项 -F"\n"

但是其实我写的时候第一次是有错误的
我第一次写的如下:

awk 'BEGIN{ for(i = 0;i<5;i++) print $i }' 1.txt

awk 'BEGIN{ for(i = 0;i<5;i++)} {print $i }' 1.txt

它输出了5行空行

这样写

wk 'BEGIN{ for(i = 0;i<5;i++)} END{print $i }' 1.txt

它输出了一行空行

那这到底是为什么呢???

因为在awk的BEGIN中其进行的是初始化,在这一步中,已经将i初始化为4,也就是最后一行的最后一个空列,也就是回车符,所以就失败了~~

你可以试着将前面不能输出awk语句中i的最大值改小一点,就会发现输出内容了,不过当然与我们的初衷向背驰啦~

所以说还是要细心啦!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

五月的天气

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

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

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

打赏作者

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

抵扣说明:

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

余额充值