2017-05-17 104 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