2014-10-06 42 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