awk中的getline函数

getline

getline函数得到下一行可能的返回值为:

1 如果能够读取一行。
0 如果到了文件末尾。
-1 如果遇到错误。

从文件中读取
getline函数除了能读取正常的输入流外,还可以从文件或管道中读取。
while((getline<"filepath")>0)
print

将输入赋给一个变量
读取下一行并赋值给变量input:
getline input

从管道读取输入
执行一个命令并将结果用管道输送到getline。
"who am i"|getline
当一个命令的输出结果被用管道输送给getline且包含多个行时,必须创建一个循环来执行getline。
while("who"|getline)
who_out[++i]=$0

获取用户标准输入

1.getline<"-"

2.getline<"/dev/tty"

例子:

awk 'BEGIN{printf "Enter your name:";getline<"-";print}'

三个$1

#!/bin/bash
filename:awk_whoami.sh
awk '
BEGIN{"who am i"|getline
name=$1
FS=":"
}
name ~ $1{print $5}
' $1

第一个$1:getline读取下一行将其赋给$0,故$1指新输入行的$1。
第二个$1:指第三个$1中的且与name匹配的某一行的$1。
第三个$1:指脚本后的参数,如./awk_whoami.sh /etc/passwd,故此$1指/etc/passwd。

posted @ 2018-10-09 10:57  korons  阅读(2221)  评论(0编辑  收藏  举报