2014-10-06 64 views
0

我現在從未使用過awk。
最近我遇到了一個awk腳本,說
{Some previous command}| awk -W interactive '{print} /Please press CTRL\+C to exit./ {print "Exiting."; system("kill " system("echo "))}'
我必須讓這個腳本在Windows上運行。
但我甚至不知道它做了什麼。
任何幫助表示讚賞,請不要告訴我去搜索我已經完成的手冊頁,這似乎很複雜。
我剛剛掌握到它是模式動作語句的某種形式。
如果任何awk專業知道發生了什麼,請讓我知道。
如果可能的話,我將能夠在Windows上運行此腳本。瞭解awk表達式

+2

安裝cygwin並直接在其中運行awk。 – choroba 2014-10-06 09:35:59

+0

不可能,我想用最少的依賴關係來做。我已經安裝了cygwin。如果你知道這個awk語句,請解釋一下。 – 2014-10-06 09:37:55

回答

0

這似乎很奇怪

基本上,awk的代碼看起來像它吐出來輸入的每一行(與{print}指令),因爲它認爲它的行緩衝模式(-W interactive)。

當涉及到Please press CTRL+C to exit.行時,它會通知終端並嘗試執行相當奇怪的系統命令。

print "Exiting."; system("kill " system("echo ")) 

也許我誤讀這個,但看起來應該移交給kill 0如果echo命令成功。 Kill 0 kills off everything in the current process group

+0

我對一個被遺忘的方面感到抱歉,'打印「退出。系統(「kill」系統(「echo」$ SPID「))' - 2014-10-06 11:59:38

+1

不,」SIPD「包含當前輸入記錄中字段的數值。取消設置它的值爲零,因此計算結果爲'$ 0',這將導致整個記錄被傳遞給'echo',接着是最後一個雙引號和下一個引號之間的任何內容。 awk不是shell。 – 2014-10-06 16:12:57