awk search em colunas específicas

2

Temos um arquivo como este (com muito mais linhas):

BeginJobID=S0065546 JESMSGLG(1/281) jname=CICWCMWD queue=EXECUTION JESMSGLG(2/281) BeginJobID=S0065568 jname=CICWWUWD queue=EXECUTION JESMSGLG(3/281) jname=CICWMCWD BeginJobID=S0065569 queue=EXECUTION JESMSGLG(4/281) jname=CICWTQ11 queue=EXECUTION BeginJobID=S0065599 BeginJobID=S0065600 JESMSGLG(5/281) queue=EXECUTION jname=CICWFA11 JESMSGLG(6/281) jname=CICWFA21 BeginJobID=S0065601 queue=EXECUTION JESMSGLG(7/281) jname=CICWFY11 BeginJobID=S0065602 queue=EXECUTION BeginJobID=S0065603 JESMSGLG(8/281) jname=CICWFY21 queue=EXECUTION BeginJobID=S0065604 JESMSGLG(9/281) jname=CICWFQ11 queue=EXECUTION BeginJobID=S0065605 JESMSGLG(10/281) queue=EXECUTION jname=CICWFT11 JESMSGLG(11/281) jname=CICWFT21 queue=EXECUTION BeginJobID=S0065606 JESMSGLG(12/281) jname=CICWFT31 queue=EXECUTION BeginJobID=S0065607 JESMSGLG(13/281) jname=CICWFT41 queue=EXECUTION BeginJobID=S0065608 BeginJobID=S0065609 JESMSGLG(14/281) jname=CICWGA11 queue=EXECUTION BeginJobID=S0065612 JESMSGLG(15/281) jname=CICWGA21 queue=EXECUTION JESMSGLG(16/281) BeginJobID=S0065613 jname=CICWGQ11 queue=EXECUTION BeginJobID=S0065614 JESMSGLG(17/281) queue=EXECUTION jname=CICWGY11 BeginJobID=S0065615 JESMSGLG(18/281) jname=CICWGT21 queue=EXECUTION BeginJobID=S0065616 JESMSGLG(19/281) jname=CICWTT41 queue=EXECUTION JESMSGLG(20/281) BeginJobID=S0065617 jname=CICWGT11 queue=EXECUTION

Eu gostaria de saber um comando awk simples para fazer 2 relatórios como estes:

  1. em execução: awk_simple_command_(jname=) resultado:
CICWCMWD
CICWWUWD
CICWMCWD
CICWTQ11
CICWFA11
CICWFA21
CICWFY11
CICWFY21
CICWFQ11
CICWFT11
CICWFT21
CICWFT31
CICWFT41
CICWGA11
CICWGA21
CICWGQ11
CICWGY11
CICWGT21
CICWTT41
CICWGT11
  1. em execução: awk_simple_command_(BeginJobID=) resultado:
S0065546
S0065568
S0065569
S0065599
S0065600
S0065601
S0065602
S0065603
S0065604
S0065605
S0065606
S0065607
S0065608
S0065609
S0065612
S0065613
S0065614
S0065615
S0065616
S0065617
    
por Alex Bermudez 01.10.2012 / 20:52

2 respostas

1

No caso de seu arquivo de dados de entrada conter colunas delimitadas apenas por espaços, sem novas linhas, aqui está uma maneira de resolver o problema usando o awk:

reports.awk

BEGIN {
  /* Split records on the space character */
  RS=" ";
  /* Within each record, split the components (fields) on the '=' character */
  FS="=";
}
/* When the first field is the one requested (colname), 
   print the second field. */
$1 == colname { print $2; }

Então, assumindo que seu arquivo de dados é chamado " data ", você pode invocar o programa da seguinte forma:

$ awk -f reports.awk nome_coluna = dados jname

Naturalmente, usar colname = jname ou colname = BeginJobID dependendo de quais dados você deseja extrair. Isso deve produzir a saída desejada.

Se o seu arquivo de dados, por vezes, usa uma nova linha em vez de um espaço, você vai querer convertê-los em espaços primeiro e canalizar o resultado em awk:

$ cat dados | tr "\ n" "" | awk -f reports.awk nome do grupo = BeginJobID -

E você certamente pode usar esse comando em um script de shell se for usá-lo com frequência.

    
por 01.10.2012 / 22:37
0

Você também pode querer considerar o uso de grep :

grep -o 'jname=[^ ]\+' infile | grep -o '[^=]\+$'

E:

grep -o 'BeginJobId=[^ ]\+' infile | grep -o '[^=]\+$'
    
por 02.10.2012 / 05:59

Tags