Problema de Bash de Citação

0

Aqui está o meu código.

Eu posso dar porque eu faço este código. Eu tento pegar 1 arquivo, pegar uma linha e adivinhar se essa linha 1 tem algum "", se sim, eu mudo para o segundo arquivo e tento ver se a linha 1 tem "" se não , Eu mantenho os dados do arquivo2 / line1 e entro no arquivo final.

Mas a minha pergunta é: como fazer uma citação de fuga?

#! /bin/bash
compteur="1"
ligne="2"
rm testfinal 2>/dev/null
touch testfinal 2>/dev/null
#########BOUCLE PERMUTATION LIGNE

while (( $ligne < "32" ))
do
        if [ 'cat test$compteur | sed -n $ligne\p | awk -F" "'{print $2}' ' == "*" ]
        then compteur=$((compteur+1));
        else
                   cat test$compteur | sed -n $ligne\p >> testfinal
                   ligne=$((ligne+1));
                   compteur=$((compteur=1));
fi
done

Edit: eu me encontro, as respostas dele: if [" sed -n $ligne\p test$compteur | awk -F" " '{print $2}' " == "*"]

    
por Clément Merger 24.10.2018 / 18:55

2 respostas

1

Seu comando de exemplo não faz sentido. Você não tem then ou fi para usar seu if e está inserindo comandos incorretamente em um bloco test (ou seja, [ ).

Seu código:

if [ 'cat test$compteur | sed -n $ligne\p | awk -F" " '{print $2}' ' == "*" ]

Parece que você está tentando comparar a saída dessa cadeia de comandos, e se a saída é literalmente * , então faça alguma coisa indeterminada? Em caso afirmativo:

if [[ "$( cat test$computer | sed -n $ligne\p | awk -F' ' '{print $2}')" == "*" ]]; then
    do_something
fi

Mas isso pode ser otimizado um pouco; não menos por se livrar de seu "uso inútil de cat :

if [[ "$( sed -n $ligne\p test$computer | awk -F' ' '{print $2}')" == "*" ]]; then
    do_something
fi

Não tenho certeza sobre o que você está fazendo com o comando sed , mas presumindo que linge seja uma variável contendo um número de linha para imprimir, isso pode ser feito apenas em awk :

if [[ "$( awk -F' ' -v ln=$linge 'NR==ln { print $2 }' )" == "*" test$computer ]]; then
    do_something
fi

Pegando o script completo que você enviou na sua "resposta", eu o reescrevi com essas alterações e alguns outros pequenos ajustes:

#!/bin/bash
compteur="1"
ligne="2"
> testfinal # clears contents of file in one step rather than rm; touch
#########BOUCLE PERMUTATION LIGNE

while [[ "$ligne" -lt 32 ]]; do
    if [[ "$( awk -F' ' -v ln=$ligne 'NR==ln { print $2 }' test$computer )" == "*" ]]; then
        compteur=$((compteur+1));
    else
        awk -v ln=$ligne 'NR==ln' >> testfinal
        ligne=$((ligne+1))
        compteur=$((compteur+1)); # I presume that the original 'compteur=1' was a typo.
    fi
done
    
por 24.10.2018 / 19:14
0

É possível que você misture aspas simples ' e as marcações ""? Com back carrapatos (o antigo e obsoleto "comando de substituição", equivalente ao novo $(...) ), sua linha de código faria algum sentido, não obstante as propostas de melhoria do GopeGhoti.

    
por 24.10.2018 / 22:18

Tags