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

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

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

O primeiro arquivo possui 4 campos: classe CRN #, Instructor ID #, Class Section #, Number of Students.

Exemplo:

0002  T00005  006  15
0004  T00004  012  26
.
.
etc

O segundo arquivo tem 6 campos (pelo que posso dizer): ID do instrutor, nome, sobrenome, prédio, código de área, número de telefone.

(não tenho certeza se o nome/sobrenome é 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 ministrou em um determinado semestre? A solução precisa estar na forma de:

# of sections | Instructor ID # | FirstName | LastName  

(Eu apenas uso o '|' para demonstração - a solução na verdade usa apenas espaços)

Até agora, eu fiz isso:

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

( sem092é o primeiro arquivo que mencionei)

E a saída foientãoperto do que eu preciso. Do código acima eu obtive:

Num. of Sections Taught |  Instructor ID #

De alguma forma, através de pipes, tenho que combinar o ID # com os nomes do outro arquivo. Tenho uma sensação muito forte de que vou precisar usar grep. Não procuro ninguém para “segurar minha mão”. Acho isso extremamente interessante, mas acho que perdi alguma coisa no caminho e preciso de um empurrãozinho ou dois.

Responder1

Salve 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 essa firtsPart.txtlinha se parece com:

5 T00005

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

Finalmente tente:

bash searchInstructorName.sh firstPart.txt

deveria 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 searchInstructorInfo.she execute:

 bash searchInstructorInfo.sh sections/sem092 instructorList

Responder2

Obrigado por suas respostas detalhadas, Letizia. Usei pedaços do seu código e parte do seu código, por sua vez, me deu mais ideias. Só para não deixar esse post pendurado: meu código final (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 esse código é mortificante - mostrei ao meu professor hoje e ele disse: "Hmm...Deixe-me ver. O que você fez aqui?" lol. Mas depois que ele olhou para ele, ele disse que estava tudo bem. Ele sempre diz: “Há mais de uma maneira de esfolar o proverbial gato”.

Obrigado pela ajuda de todos - nomeadamente Letizia.

informação relacionada