【问题标题】:Run awk comand on a remote server through ssh通过 ssh 在远程服务器上运行 awk 命令
【发布时间】:2020-10-30 06:36:08
【问题描述】:

我正在尝试从远程服务器上的文件中获取一组特定的值。通过终端执行该命令时,该命令可以正常工作。

第一个 ssh 命令

sshpass -p password ssh -T user@ip

第二个 Awk 命令

find /opt/Info_Source/*daily* -type f -mtime -1 -exec zcat {} \; 2>/dev/null | awk -F, -v OFS=',' '$5 ~ /Valid/ && length($2) {print $2}'

但如果我将它们结合在一个脚本中

#!/bin/ksh
emp_id=`sshpass -p password  ssh -T user@ip -q << EOF
    find /opt/Info_Source/*daily* -type f -mtime -1 -exec zcat {} \; 2>/dev/null | 
    awk -F, '$5 ~ /Valid/ && length($2) {print $2}'
                        exit
                        EOF `
                        
echo "$emp_id" > Request.txt

我收到此错误

awk:  ~ /Valid/ && length() {print }
awk:  ^ syntax error

知道如何解决这个问题吗?

【问题讨论】:

  • 如果您不使用命令替换使事情复杂化,这会更简单。只需将命令的输出直接写入文件即可。

标签: bash awk ssh remote-access ksh


【解决方案1】:

在发送脚本之前,awk 变量在本地扩展为 shell 变量。引用 here 文档分隔符以按原样发送 here 文档。

(另外,去掉命令替换,直接写入文件。)

#!/bin/ksh

sshpass -p password  ssh -T user@ip -q << 'EOF' > Request.txt
find /opt/Info_Source/*daily* -type f -mtime -1 -exec zcat {} \; 2>/dev/null | 
awk -F, '$5 ~ /Valid/ && length($2) {print $2}'
EOF

【讨论】:

  • 嗯,有时一个简单的解决方案是最好的选择,确实效果很好。感谢您的帮助
最近更新 更多