2017-05-17 79 views

回答

1

-表示标准输入等终端。没有这一点,如果在命令行中指定了一个文件,awk将从该文件中读取。

首先,我们假设是有一个文件:

$ cat file 
Tom 

现在,让我们运行代码,而不<"-"

$ awk 'BEGIN { printf "Enter your name: "; getline; print "Name=" $0 }' file 
Enter your name: Name=Tom 

正如你可以看到,它从文件中读取名称file

假设我们希望用户在终端输入名称。在这种情况下,我们希望从终端获取一条线,表示为-,而不是来自该文件。因此,我们使用:

$ awk 'BEGIN { printf "Enter your name: "; getline <"-"; print "Name=" $0 }' file 
Enter your name: John 
Name=John 

正如你可以看到,这一次读到我在终端上输入而忽略了文件的名称。

+1

我试过了,就像你说的,谢谢 – kingslayer

1

该片段是awk程序的一部分。 Awk不是壳。

getline < "-" 

从标准输入中读取一行。

getline 

读取来自awk命令行或标准输入中指定的第一文件中的一行,如果没有命令行参数。

因此,如果您不在awk命令行中指定文件,但它们将执行相同的操作,但如果您确实指定文件,getline < "-"仍会从stdin读取。

+0

明白,谢谢 – kingslayer