Run awk comand on a remote server through ssh

血红的双手。 提交于 2021-02-05 11:46:45

问题


I'm trying to get a specific set of values from a file on a remote server. The command works fine when executing that through terminal.

First ssh Command

sshpass -p password ssh -T user@ip

Second Awk Command

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

but if I combine both of them in a script

#!/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

I get this error

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

Any idea how I can fix that?


回答1:


The awk variables are expanded as shell variables locally before the script is sent. Quote the here document delimiter to send the here document as-is.

(Also, get rid of the command substitution and just write directly to the file.)

#!/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


来源:https://stackoverflow.com/questions/62818698/run-awk-comand-on-a-remote-server-through-ssh

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!