Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
190 views
in Technique[技术] by (71.8m points)

bash - Run awk comand on a remote server through ssh

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?

question from:https://stackoverflow.com/questions/65650351/why-am-i-still-getting-file-directory-in-md5sum-while-using-awk

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...