2013-11-15 215 views
0

我尝试使用ssh运行远程awk语句。我的代码是:使用ssh运行远程awk命令

ssh [email protected] "awk 'NR==1 {max=0;min=1} NR>1 {if (max<\$3) max=\$3}END {print max}' FS=\",\" /path_to_my_file" 

当我运行此命令,我没有收到错误信息,但命令不工作,不产生输出,但只是挂,所以我需要通过CTRL + C取消它。

有什么我失踪?

+0

什么是在'awk'命令之后执行'FS ='的命令?也许你打算做'awk -v FS =,'...''而不是? – janos

+0

这两个作品janos。 –

+0

janos是正确的,我认为FS后混淆ssh而双引号,而我用\逃避他们,但它看起来没有工作。使用ssh username @ hostIP“awk -v FS =,'NR == 1 {max = 0; min = 1} NR> 1 {if(max <\ $ 3)max = \ $ 3}的格式END {print max} '/ path_to_file“命令产生了期望的结果。谢谢。 – JavaRed

回答

10

试试这个使用这里-DOC

ssh -t [email protected] <<'EOF' 
awk ' 
    NR==1 {max=0;min=1} 
    NR>1 {if (max<$3) max=3} 
    END {print max} 
' FS="," /path_to_my_file 
EOF 

各地EOF单引号防止shell扩展。

+0

我收到的伪终端将不会被分配,因为stdin不是终端错误消息。 – JavaRed

+0

只是一个警告,我认为。 –

+1

它与-t -t选项一起工作。即使stdin不是终端,也要强制伪tty分配。 – JavaRed