问题
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