find comando não está dando saída

1

Por favor, alguém sabe por que este comando não está me dando nenhuma saída? todas as variáveis estão corretas, mas não resultam.

find . -name "$cdr_type*$DAYZ*.unl*" |
  xargs zcat |
  awk -F "|" '{if($14==$tdate && $22==$misdn) print $0}'|
  head

Quando faço eco do comando assim

echo "find . -name $cdr_type*$DAYZ*.unl* | xargs zcat | awk -F | '{if($14==$tdate && $22==$misdn) print $0}'|head" 

aqui está minha saída:

find . -name mgr*20160928*.unl* |
  xargs zcat |
  awk -F | '{if(4==20160928093911 && 2==2348094398953)}'|
  head

A minha observação é mostrar $ 4 e $ 2 em vez de $ 14 e $ 22

    
por yemmy 04.10.2016 / 17:41

1 resposta

3

$14 quando expandido pelo shell na maioria das shells parecidas com Bourne é o mesmo que ${1}4 , e se $1 estiver vazio ou não configurado, isso dá 4 como esperado. Aqui você deseja passar um $14 litteral para awk para que awk o trate como seu 14º campo.

Normalmente, entre aspas simples, essa variável $1 não seria expandida, mas você não está nos dizendo como ecoa esse comando.

De qualquer forma, aqui, parece que você quer:

find . -name "$cdr_type*$DAYZ*.unl*" -exec zcat {} + |
  awk -F "|" -v tdate="$tdate" -v misdn="$misdn" '
   $14 == tdate && $22 == misdn' |
 head

Isso é passar o conteúdo das variáveis $tdate e $misdn shell como awk variables.

    
por 04.10.2016 / 17:57