Corresponder valores ausentes em arquivos de texto

2

Referindo-se a esta pergunta:     Encontrando o valor ausente no arquivo de texto

Eu tenho 2 arquivos contendo os dados abaixo

exemplo

Name             Feature
Marry            Lecturer
Marry            Student
Marry            Leader
Bob              Lecturer
Bob              Student
Som              Student

recurso

 Lecturer
 Student
 Leader 

Estou seguindo o código abaixo para encontrar um recurso ausente em qualquer nome no arquivo de exemplo:

#!/bin/bash
rm -f *.missing names.all
feature=feature
sed -n '1!p' example.txt | cut -d ' ' -f 1 | sort -u > names.all
for i in $(cat $feature)
do
  fgrep $i example.txt | cut -d ' ' -f 1 | cat - names.all | sort | uniq -u >  $i.missing 
done 

Esse código fornece três arquivos diferentes, como lecturer.missing, student.missing e leader.missing, e contém todo o nome que não possui esse recurso.

mas eu quero que os dados estejam no mesmo arquivo e a saída deve ser:

Eu preciso de uma saída assim:

Lecturer   Student   Leader
  Som                 bob
                      Som

Eu tentei usar o acréscimo dos dados no mesmo arquivo, mas não funciona.

    
por user21546 12.11.2014 / 17:38

2 respostas

2

Este código

awk '
  NR == FNR {feature[$1]=1; next} 
  $1 != "Name" {name[$1]=1; role[$1,$2]=1} 
  END {
    for (f in feature)
      printf "%-12s", f
    print ""
    for (n in name) { 
      for (f in feature) 
        printf "%-12s", (n SUBSEP f in role ? " " : n)
      print ""
    }
  }
' features roles 

fornece este resultado

Lecturer    Student     Leader      

                        Bob         
Som                     Som         

perto o suficiente?

    
por 12.11.2014 / 18:30
0

Todos os comentários dentro do texto

awk '
  # make array with FEATURE elements from file "feature"
  FNR==NR{f[$1]=1;next}
  # collect to array all FEATUREs NAME by NAME
  FNR>1{e[$1]=e[$1]" "$2}
  # loop for each element in FEATURE array
  END{for (i in f) {
        # produce a head row with FEATURE elements
        r[0]=r[0] i" "
        # starts row counts for each FEATURE elements
        c=0
        # call all NAMEs 
        for (n in e)
          # check if the FEATURE do not exist for the NAME  
          if(e[n] !~ i){
            # produce next row number 
            ++c
            # construct apropriate row
            if(c in r)
              # if row exist add value to it
              r[c]=r[c] " " n
            else
              # if not exist put apropriate spaces before value
              r[c]=s n
            # find maximum row number between all FEATUREs
            if(c>l)
              l=c
          }
        # make shift in row for next FEATURE  
        s=s" "
      }
      # prints row by row
      for (k=0;k<=l;k++)
        print r[k]
  }' feature example | column -tn
    
por 12.11.2014 / 23:32