2014-01-15 50 views
0

我在Windows机器上使用Cygwin从远程Linux机器获取一些信息并将结果写入文件。这是我的命令:cygwin awk打印为文件名添加了奇怪的字符

ssh [email protected] ps -aef | grep vnc | grep -v grep | awk '{print "<size>"$11"<\/size>""\n""<colorDepth>"$13"<\/colorDepth>"}' > myfile.txt 

然而,当我再运行

ls -l 
在哪里myfile.txt中写的目录

,则说明该文件的名称实际上是myfile.txt的?(附加问号)。哪里是多余的字符来自我怎样才能得到正确的打印代码文件命名为简单的myfile.txt

我会运行另一个命令,如

mv myfile.txt? myfile.txt 

mv myfile.txt^M myfile.txt 

但在我的bash脚本中,似乎都没有找到要重命名的文件(尽管有趣的是我可以从终端(不在脚本中)开始输入

mv myf 

然后选项卡完成该文件的查找,然后用新文件名完成该行并成功重命名该文件。

+0

没有文件名称的问题在我的cygwin中,名称'myfile.txt'是正确的。一个建议在awk命令中使用printf:'ssh user @ remotemachine ps -aef | grep vnc | grep -v grep | awk'{printf'%s \ n %s \ n“,$ 11,$ 13}'> myfile.txt' – BMW

+1

命令是否在脚本中?您可能想要查看'od -cx

0

此:

ssh [email protected] ps -aef | grep vnc | grep -v grep | awk '{print "<size>"$11"<\/size>""\n""<colorDepth>"$13"<\/colorDepth>"}' > myfile.txt 

可以被改写为:

ssh [email protected] ps -aef | awk '/[v]nc/ {print "<size>"$11"<\/size>""\n""<colorDepth>"$13"<\/colorDepth>"}' > myfile.txt 

为了防止grep不觉得自己在ps使用[first letter]

grep vnc | grep -v grep 
grep [v]nc 

awk可以做到这一点

awk '/[v]nc/ {some code}'