Como executar um script awk complexo em uma máquina remota?

1

Eu preciso executar a seguinte sintaxe do awk em uma máquina remota para remover linhas duplicadas (na máquina remota):

Eu também coloco "\" antes do "!", mas não funciona.

 ssh root@$remote_machine "    awk '/^#/ || !a[$0]++' /tmp/file > /tmp/file.new"
-bash: !a[$0]++': event not found
 ssh root@$remote_machine "    awk '/^#/ || \!a[$0]++' /tmp/file > /tmp/file.new"

 awk: cmd. line:1: /^#/ || \!a[-bash]++
 awk: cmd. line:1:         ^ backslash not last character on line
 awk: cmd. line:1: /^#/ || \!a[-bash]++
 awk: cmd. line:1:         ^ syntax error

Alguma ideia, como resolver este problema?

Um exemplo do meu arquivo:

# ssh root@$remote_machine "   cat  /tmp/file "
fref
ref
erv
rtgrvf
t
ttt
ttt
ttt
f
f
dd
dd
efcref
vgt
vrt
brye
nhrtuym

Eu também tentei o seguinte:

# ssh root@$remote_machine "    awk '/^#/ || "'!'"a[$0]++' /tmp/file "
fref
    
por yael 12.07.2017 / 13:33

1 resposta

1

Você precisa de aspas simples em torno do ! para impedir que a expansão do bash e \ escape do $ :

ssh root@$remote_machine "    awk '/^#/ || "'!'"a[\
ssh root@$remote_machine "    awk '/^#/ || "'!'"a[\%pre%]++' /tmp/file > /tmp/file.new"
]++' /tmp/file > /tmp/file.new"

man bash explica por que tentar escapar do ! usando \ não funciona no seu caso:

Enclosing characters in double quotes preserves the literal value of all characters within the quotes, with the exception of $, ', \, and, when history expansion is enabled, !. The characters $ and ' retain their special meaning within double quotes. The backslash retains its special meaning only when followed by one of the following characters: $, ', ", \, or . A double quote may be quoted within double quotes by preceding it with a backslash. If enabled, history expansion will be performed unless an ! appearing in double quotes is escaped using a backslash. The backslash preceding the ! is not removed.

O caractere \ não será removido depois de escapar do ! . Isso explica o erro de sintaxe awk obtido.

    
por 12.07.2017 / 15:01

Tags