当前位置:网站首页>awk从入门到入土(11)awk getline函数详解
awk从入门到入土(11)awk getline函数详解
2022-07-04 08:38:00 【奇妙之二进制】
**getline命令是我个人认为awk最强大的一个命令。因为它彻底改变了awk的运行逻辑。**awk本质上就是一个for循环,它每次对输入文件的一行进行处理,然后转而执行下一行,直到整个文件的每一行都被执行完毕。整个过程是自动的,你无需做什么。但是,getline命令却可以让你去控制循环。当然,getline命令执行后,awk会设置NF,NR,FNR和$0等这些内部变量。
我们先看一个简单的例子,打印出从1到10之间的偶数:
$ seq 10 | awk '{getline; print $0}'
2
4
6
8
10
那么getline究竟是实现什么功能呢?正如getline的翻译,得到行,但是注意,得到的并不是当前行,而是当前行的下一行。以上面的例子来分析,awk首先读取到了第一行,就是1,然后getline,就得到了1下面的第二行,就是2,因为getline之后,awk会改变对应的NF,NR,FNR和$0等内部变量,所以此时的$0的值就不再是1,而是2了,然后将它打印出来。以此类推,就可以得到上面的结果。同样,我们可以利用getline只打印出奇数行。
$ seq 10 | awk '{print $0; getline}'
1
3
5
7
9
与打印偶数行的唯一区别就是print $0和getline的顺序不一样。因为getline在print $0之后,此时的$0仍然是第一行。然后getline,$0变成了下一行2。依次类推,就打印出了奇数行。
下一个我们换一个难一些的,就是奇偶行对调打印,原来在奇数行的内容将其打印在偶数行,原来在偶数行的内容将其打印在奇数行。
$ seq 10 | awk '{getline tmp; print tmp; print $0}'
2
1
4
3
6
5
8
7
10
9
上面例子将getline得到的下一行的内容放在了tmp这个变量里,因此NF,NR,FNR和$0等内部变量并不会被改变。
另外getline也可以从另外一个文件中读取内容。下面例子实现将两个文件的每一行都打印在一行上。
[email protected]:~/bash/awk$ awk '{printf "%s ", $0; getline < "b.txt"; print $0}' a.txt
1 6
2 7
3 8
4 9
5 10
a.txt文件的内容为上面打印出来的第一列,b.txt文件的内容为上面打印出来的第二列。
此外,getline支持从管道读取。下面例子通过getline得到系统的当前时间。
[email protected]:~/bash/awk$ awk 'BEGIN {"date" | getline; close("date"); print $0}'
Tue May 10 07:50:51 PDT 2016
getline的使用方法汇总如下:
getline
reads into $0, updates the fields, NF, NR and FNR.
getline < file
reads into $0 from file, updates the fields and NF.
getline var
reads the next record into var, updates NR and FNR.
getline var < file
reads the next record of file into var.
command | getline
pipes a record from command into $0 and updates the fields and NF.
command | getline var
pipes a record from command into var.
返回值:
-1 失败
0 读到文件末尾
1 成功
边栏推荐
- 猜数字游戏
- Redis 哨兵机制
- Collections in Scala
- Four essential material websites for we media people to help you easily create popular models
- [BSP video tutorial] stm32h7 video tutorial phase 5: MDK topic, system introduction to MDK debugging, AC5, AC6 compilers, RTE development environment and the role of various configuration items (2022-
- Wechat has new functions, and the test is started again
- Three paradigms of database design
- Take you to master the formatter of visual studio code
- Azure ad domain service (II) configure azure file share disk sharing for machines in the domain service
- Webapi interview question summary 01
猜你喜欢
![Sports [running 01] a programmer's half horse challenge: preparation before running + adjustment during running + recovery after running (experience sharing)](/img/c8/39c394ca66348044834eb54c68c2a7.png)
Sports [running 01] a programmer's half horse challenge: preparation before running + adjustment during running + recovery after running (experience sharing)

1. Qt入门

AcWing 244. Enigmatic cow (tree array + binary search)

FOC控制

NewH3C——ACL

1. Getting started with QT

一文了解数据异常值检测方法

High order phase difference such as smear caused by myopic surgery

转:优秀的管理者,关注的不是错误,而是优势

Newh3c - routing protocol (RIP, OSPF)
随机推荐
2022 electrician (intermediate) examination question bank and electrician (intermediate) examination questions and analysis
deno debugger
snipaste 方便的截图软件,可以复制在屏幕上
How to set multiple selecteditems on a list box- c#
What should I do if there is a problem with the graphics card screen on the computer
Group programming ladder race - exercise set l1-006 continuity factor
NPM run build error
Using the rate package for data mining
What does range mean in PHP
[performance test] read JMeter
How to get bytes containing null terminators from a string- c#
[attack and defense world | WP] cat
Redis 哨兵机制
User login function: simple but difficult
Xcode 6 swift code completion does not work properly - Xcode 6 swift code completion not working
SQL statement view SQL Server 2005 version number
Cancel ctrl+alt+delete when starting up
2022 gas examination registration and free gas examination questions
Laravel page load problem connection reset - PHP
The second session of the question swiping and punching activity -- solving the switching problem with recursion as the background (I)