combinando shell bourne e awk

0

Este é o arquivo WAS do meu arquivo atual

#!/bin/sh
sed -i '/^ *$/d' WASfile  
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasdm/WASfile;  
Script to Add  
read -p "Press [Enter] to continue for Installation"  

Agora, quero colocar o seguinte script em Script para adicionar acima e, em seguida, executar o WASfile como script (que é a combinação de muitos scripts ou comandos).

#!/usr/bin/awk -f  

BEGIN   { FS="=" }  
NR==FNR { a[$1]=$0; next }  
$1 in a { $0=a[$1] }  
/^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }  
1    

Eu quero combinar e usar como abaixo ou uma maneira melhor de combinar os dois scripts.

#!/bin/sh  
sed -i '/^ *$/d' WASfile  
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasdm/WASfile;  
#!/usr/bin/awk -f  

BEGIN   { FS="=" }  
NR==FNR { a[$1]=$0; next }  
$1 in a { $0=a[$1] }  
/^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }  
1  
read -p "Press [Enter] to continue for Installation"  

Não consigo executar o script.

Então, eu tentei extrair o AWKscript para outro arquivo e tentar executar o AWKscript. Mas, o problema é depois de extrair, o script principal WASfile se quebra ou falha.

#!/bin/sh
sed -i '/^ *$/d' WASfile;
sed -i -e '/\/usr\/bin\/awk/,/baba/{w 1' -e 'd}' WASfile;
#!/usr/bin/awk -f

BEGIN   { FS="=" } NR==FNR { a[$1]=$0; next } $1 in a { $0=a[$1] } /^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } } 1
baba
read -p "Press [Enter] to continue for Installation"

como abaixo

#./WASfile
sed: -e expression #1, char 24: missing command
./WASfile: line 6: BEGIN: command not found
./WASfile: line 7: {: command not found
./WASfile: line 7: next: command not found
./WASfile: line 8: in: command not found
./WASfile: line 9: syntax error near unexpected token '/^#/,'
./WASfile: line 9: '/^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }  '
    
por user2692634 18.11.2013 / 09:57

1 resposta

0

Da sua pergunta, eu entendo que seu primeiro script está armazenado em um arquivo chamado WASfile . Você precisa ter certeza de que o script tem o bit executável definido:

chmod a+x WASfile

Então você pode executar o script: ./WASfile . Como o diretório atual não está na variável PATH , por padrão, você precisa especificar explicitamente o caminho para o diretório atual ./ ou o caminho absoluto /home/wasadm/WASfile .

O mesmo se aplica ao script AWK: torne-o executável e chame-o com um caminho especificado.

No script WASfile , você pode chamá-lo da mesma maneira que na linha de comando. A linha de comando também é um shell - igual ou semelhante ao shell executando o script firs.

#!/bin/sh
sed -i '/^ *$/d' WASfile
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasadm/WASfile
/path/to/the/AWKscript inputfile1 inputfile2 >outputfile1
read -p "Press [Enter] to continue for Installation"

O código acima executará o script AWKscript armazenado dentro do diretório /path/to/the . Com os arquivos como parâmetros com os nomes autodescritivos. Coloque os arquivos que você precisa lá.

Outra opção é invocar awk explicitamente. Nesse caso, você não precisa ativar o bit executável do arquivo.

awk -f /path/to/the/AWKscript

O último trecho de código da pergunta não funcionará

A combinação mostrada no seu último trecho de código não funcionará. Sistemas Unix-like são projetados para executar um único arquivo executável por um único intérprete.

    
por 18.11.2013 / 10:41

Tags