Запустить awk comand на удаленном сервере через ssh - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь получить определенный c набор значений из файла на удаленном сервере. Команда отлично работает при выполнении через терминал.

Первые s sh Команда

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

Любой идея, как я могу это исправить?

1 Ответ

1 голос
/ 09 июля 2020

Переменные awk локально раскрываются как переменные оболочки перед отправкой скрипта. Цитируйте разделитель здесь документа, чтобы отправить документ как есть.

(Кроме того, избавьтесь от подстановки команд и просто напишите прямо в файл.)

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