记用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的最大值改小一点,就会发现输出内容了,不过当然与我们的初衷向背驰啦~

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

猜你喜欢

转载自blog.csdn.net/qq_37414405/article/details/83537254