usa uma variável de exportação como parte do nome do arquivo no programa awk

1

Eu defini um export X25DATAF=/home/Bob/X25/Datafiles no meu perfil e é isso que é produzido quando eu faço um echo $X25DATAF .

Desejo substituir /home/Bob/X25/Datafiles no awk abaixo pelo $X25DATAF nos 2 locais em que está no programa awk . Mas não consigo fazer funcionar (ex: $X25DATAF/ALL_SW_DB.txt ). Dessa forma, tudo o que tenho que fazer é definir export para o caminho no sistema em que eu estiver, para executar este programa awk (e outros como ele).

awk -F"\t" ' 
FILENAME=="Sites1" {
  cllina[$0]=$0
}
FILENAME=="/home/bob/X25/DataFiles/ALL_SW_DB.txt" {
  swclli=hostclli=""
  swclli=substr($7,1,8)
  hostclli=substr($3,1,8)
  fclli[hostclli]++
  fclli[swclli]++

  if(hostclli==cllina[hostclli]) {
    if(swclli!=hostclli) {
      printf"REM|%s|%s|%s|%s|%s|%s|%s|%s|%s-%s\n",hostclli,$4,$3,$6,$9,$7,$12,$13,$5,$14 >>"host_remote"
    }
   }

  if(swclli==cllina[swclli]) {
      printf"HOST|%s|%s|%s|%s|%s|%s|%s|%s|%s-%s\n",swclli,$4,$3,$6,$9,$7,$12,$13,$5,$14 >>"host_remote"
    }
 }
 END{
  for(x in cllina)
    if(fclli[x]=="") printf"%s\n",x >"site1.err"
}' Sites1 /home/bob/X25/DataFiles/ALL_SW_DB.txt
    
por BobEng 12.09.2015 / 08:59

2 respostas

0

Como de costume, a construção FNR==NR (número da linha do arquivo é igual ao número inteiro da linha) é usada para o primeiro arquivo e next para pular as instruções do segundo arquivo:

awk -F'\t' -v OFS='|' '
    FNR==NR{
        cllina[$0]=1
        next
    }
    {
        swclli=hostclli=""
        …
        fclli[swclli]++
    }
    cllina[hostclli] && swclli!=hostclli{
        print "REM",hostclli,$4,$3,$6,$9,$7,$12,$13,$5,$14
    }
    cllina[swclli]{
        print "HOST",swclli,$4,$3,$6,$9,$7,$12,$13,$5,$14
    }
    …
    }' Sites1 /home/bob/X25/DataFiles/ALL_SW_DB.txt >>host_remote

ou veja comentários à sua pergunta.

    
por 12.09.2015 / 11:51
0

Este é um exemplo mais simples. Eu quero substituir as duas instâncias de /home/Bob/X25/DataFiles com a exportação de X25DATAF ( export X25DATAF=/home/Bob/X25/DataFiles ) que tenho no meu perfil. Se eu puder fazê-lo funcionar neste simples awk , posso modificar meu% realawk.

$ cat test1
test1_data
test1a_data
test1b_data

Bob@Bob-PC ~/X25/Scott/TEST/TEST1

$ cat /home/Bob/X25/DataFiles/test2
test2_data

Bob@Bob-PC ~/X25/Scott/TEST/TEST1

$ cat gettestfiles

O arquivo 1test11 tem 3 registros test1_data , test1a_data e test1b_data e está no mesmo diretório em que awk é executado.

O arquivo test2 tem apenas 1 registro test2_data e está no diretório /home/Bob/X25/DataFiles .

awk -F"_" '
FILENAME=="test1" {
  print $1 " " $2
}
FILENAME=="/home/bob/X25/DataFiles/test2" {
print $0
}
END{ }' test1 /home/bob/X25/DataFiles/test2

Bob@Bob-PC ~/X25/Scott/TEST/TEST1

$ gettestfiles
test1 data
test1a data
test1b data
test2_data

Bob@Bob-PC ~/X25/Scott/TEST/TEST1

$
    
por 13.09.2015 / 20:28