использование awk внутри ожидает программу

Я использую команду ниже для слияния file1 и file2 для получения file3:

awk 'NR==FNR {a[$2]=$1; next} {$(NF+1) = a[$NF]} 1' file2 file1 > file3 

Когда я использую эту команду в использовании сценария удара, ожидают, что я получаю file3 пустое (команда работает вручную).

#!/bin/bash
# Bash Menu Script Example

outputMME="$( expect <<END
spawn ssh atndn@x.x.x.x
expect "Password: " { send "password\r" }
expect "# " { send "bash\r" }
expect "$ " { send "cd /tmp/DPE_CORE/home/atndn/eniq/\r" }
expect "$ " { send "awk 'NR==FNR{a[$2]=$1; next} {\\\$(NF+1) = a[$NF]} 1' file2 file1 > file3\r" }
END
)"

echo "$outputMME"

File1:

 471808241 29164840 1 10001 156197396 
 471722917 21067410 1 31001 135961856 
 471941441 20774160 1 7001  180995072 
 471568655 29042630 1 15001 157502996 
 471524711 20716360 1 4001  180226817 
 471873918 29583520 1 2001  128567298 
 471568650 29042631 1 15002 157502910 

File2:

610146 156197396 
531101 135961856 
704011 180226817 
502216 128567298 
707012 180995072 
615246 157502996 
685221 157502910 

File3:

471808241 29164840 1 10001 156197396 610146 
471722917 21067410 1 31001 135961856 531101 
471941441 20774160 1 7001  180995072 707012 
471568655 29042630 1 15001 157502996 615246 
471524711 20716360 1 4001  180226817 704011 
471873918 29583520 1 2001  128567298 502216 
471568650 29042631 1 15002 157502910 685221
-1
задан 28 February 2017 в 03:12

1 ответ

Реализовать комментарий steeldriver:

outputMME="$( 
    expect <<'END'
        #....^ [1]
        spawn ssh atndn@x.x.x.x
        expect "Password: " { send "password\r" }
        expect "# " { send "bash\r" }
        expect "$ " { send "cd /tmp/DPE_CORE/home/atndn/eniq/\r" }
        expect "$ " { 
            send {awk 'NR==FNR{a[$2]=$1; next} {$(NF+1) = a[$NF]} 1' file2 file1 > file3}
            #....^ [2]
            send "\r" 
        }
        expect "$ " { send "exit\r" }
        expect "# " { send "exit\r" }
        expect eof
END
)"
  1. необходимо заключить heredoc разделитель в кавычки ('END') так, чтобы удар не делал переменной (и другой) замены в документе.
  2. необходимо правильно заключить команду awk в кавычки так, чтобы ожидали, не заменяет awk переменными.
3
ответ дан 3 November 2019 в 16:46

Другие вопросы по тегам:

Похожие вопросы: