Como combinar um número em um arquivo com um nome em outro arquivo?

1

Ok, espero que este seja o lugar certo para perguntar. Eu tenho 2 arquivos.

O primeiro arquivo tem 4 campos: classe CRN #, nº de instrutor, número da turma, número de alunos.

Exemplo:

0002  T00005  006  15
0004  T00004  012  26
.
.
etc

O segundo arquivo tem 6 campos (o melhor que posso dizer): Número do ID do Instrutor, Nome, Sobrenome, Edifício, Código de Área, Número de Telefone.

(não tenho certeza se primeiro / último nome é 1 ou dois campos ...)

Exemplo:

T00001  Larry Lastname  Corley  555  555-5555
T00002  Ron  Lastname  Coreley  555  111-1111
.
.
etc

A pergunta que devo responder é: quantas seções cada instrutor ensinou em um determinado semestre? A solução precisa estar na forma de:

# of sections | Instructor ID # | FirstName | LastName  

(Eu só uso o '|' para demonstração - A solução realmente usa apenas espaços)

Até agora, fiz isso:

$ cat sections/sem092 | sort -k 2 | awk '{ print $2 }' | uniq -c

( sem092 é o primeiro arquivo que mencionei)

E a saída foi tão perto do que eu preciso. Do código acima eu tenho:

Num. of Sections Taught |  Instructor ID #

De alguma forma, através de pipes, eu tenho que coincidir com o ID # com os nomes no outro arquivo. Eu tenho um sentimento muito strong de que vou precisar usar grep . Eu não estou procurando por alguém para "segurar minha mão". Acho isso extremamente interessante, mas acho que perdi alguma coisa ao longo do caminho e preciso de um empurrãozinho ou dois.

    
por Shane 06.10.2014 / 01:34

2 respostas

1

Salvar a saída do seu comando:

 cat sections/sem092 | sort -k 2 | awk '{ print $2 }' | uniq -c > firstPart.txt

Salve esta linha no arquivo searchInstructorName.sh :

 cat $1 | while read line; do 
    instructorID='echo $line | awk '{print $2}'' 
    name='grep $instructorID instructorList | awk '{print $2 " " $4}''
    echo "$line $name" 
 done

Este script assume que firtsPart.txt linha se parece com:

5 T00005

e que instructorList é o nome do arquivo com 6 campos.

Por fim, tente:

bash searchInstructorName.sh firstPart.txt

deve funcionar.

Esta é a versão com um único script:

 cat $1 | sort -k 2 | awk '{ print $2 }' | uniq -c | while read line; do 
    instructorID='echo $line | awk '{print $2}'' 
    name='grep $instructorID $2 | awk '{print $2 " " $4}''
    echo "$line $name" 
 done

Salve essas linhas em searchInstructorInfo.sh e execute:

 bash searchInstructorInfo.sh sections/sem092 instructorList
    
por 06.10.2014 / 02:27
0

Obrigado por suas respostas detalhadas Letizia. Eu usei pedaços do seu código e um pouco do seu código, por sua vez, me deu mais ideias. Só para não deixar esse post pendurado: meu último código (horrível) acabou assim:

 cat sections/sem092 | sort -k 2 | awk '{ print $2 }' | uniq -c > no3 
 paste instructors | awk '{ print $2 " " $3 }' > no3n   
   #guess I could have just used cat above
 paste no3 no3n

Eu sei que este código é humilhante - mostrei meu professor hoje e ele disse: "Hmm ... Deixe-me ver. O que você fez aqui?" ri muito. Mas depois que ele olhou para ele, ele disse que estava bem. Ele sempre diz: "Há mais de uma maneira de esfolar o gato proverbial".

Obrigado pela ajuda de todos - ou seja, Letizia.

    
por 06.10.2014 / 22:42

Tags