Coletei dados sobre o tempo de reação de mais de 100 participantes para um experimento que estou executando. Infelizmente, os separadores entre campos não eram consistentes, mas depois de muita mágoa com sed, consegui resolver esse problema.
O experimento foi dividido em blocos (5 para cada participante) e o que eu preciso é que cada bloco seja enviado em sua própria linha, separado por vírgulas.
Aqui está uma amostra do meu arquivo de dados:
Participant: 2456, Test: Optimism IAT. Format is stimulus , correct(1)/incorrect(0) , time(ms). Writes 10 trials per line.
17/01/2011, 12:46:03 ,
Block 1: , Theirs , 1 , 1921 , Myself , 1 , 928 , Them , 1 , 716 , Theirs , 1 , 720 , Myself , 1 , 533 , Me , 1 , 596 , Themselves , 1 , 527 , Myself , 1 , 656 , Mine , 1 , 551 , Myself , 1 , 624
, Themselves , 1 , 570 , Me , 1 , 514
,Block 1 Time,: 8856 ,
Block 2: , Failing , 1 , 1835 , Happy , 1 , 1118 , Sad , 1 , 673 , Succeeding , 1 , 690 , Improving , 1 , 795 , Succeeding , 1 , 602 , Worse , 1 , 586 , Succeeding , 1 , 553 , Improving , 1 , 619 , Disimproving , 1 , 659
, Succeeding , 1 , 596 , Failing , 1 , 539
,Block 2 Time,: 9265 ,
Block 3: , Succeeding , 1 , 2881 , Disimproving , 1 , 1072 , Mine , 1 , 1120 , Me , 1 , 627 , Happy , 1 , 669 , Theirs , 1 , 1539 , Worse , 1 , 841 , Me , 1 , 862 , Sad , 1 , 1370 , Succeeding , 1 , 1115
, Worse , 1 , 855 , Theirs , 1 , 792 , Them , 1 , 627 , Better , 1 , 735 , Me , 1 , 626 , Happy , 1 , 622 , Succeeding , 1 , 616 , Mine , 1 , 646 , Them , 1 , 599 , Disimproving , 1 , 607
, Better , 1 , 799 , Myself , 1 , 1408 , Me , 1 , 463 , Better , 1 , 839 , Failing , 1 , 602 , Mine , 1 , 633 , Better , 1 , 525 , Sad , 1 , 573 , Worse , 1 , 770 , Me , 1 , 508
, Theirs , 1 , 613 , Disimproving , 1 , 649 , Improving , 1 , 701 , Theirs , 1 , 590 , Disimproving , 1 , 716 , Better , 1 , 714
,Block 3 Time,: 29924 ,
Block 4: , Them , 1 , 1659 , Myself , 1 , 1036 , Themselves , 1 , 595 , Me , 1 , 509 , Myself , 1 , 648 , Themselves , 1 , 542 , Myself , 1 , 536 , Mine , 1 , 537 , Theirs , 1 , 615 , Mine , 1 , 520
, Me , 1 , 596 , Mine , 1 , 471
,Block 4 Time,: 8264 ,
Block 5: , Mine , 1 , 1527 , Myself , 1 , 1235 , Disimproving , 0 , 2001 , Theirs , 1 , 981 , Succeeding , 1 , 1994 , Happy , 1 , 1454 , Failing , 1 , 1941 , Theirs , 1 , 1151 , Failing , 0 , 1358 , Me , 1 , 790
, Failing , 1 , 717 , Mine , 1 , 585 , Myself , 1 , 821 , Themselves , 1 , 793 , Disimproving , 1 , 965 , Succeeding , 1 , 727 , Worse , 1 , 961 , Theirs , 1 , 1259 , Mine , 1 , 578 , Better , 1 , 1112
, Mine , 1 , 1207 , Happy , 1 , 843 , Worse , 1 , 1064 , Failing , 1 , 699 , Happy , 1 , 700 , Myself , 1 , 516 , Them , 1 , 794 , Me , 1 , 526 , Sad , 1 , 1118 , Improving , 1 , 826
, Mine , 1 , 540 , Succeeding , 1 , 952 , Myself , 1 , 536 , Themselves , 1 , 851 , Improving , 1 , 865 , Mine , 1 , 582
,Block 5 Time,: 35569
Como você pode ver, cada um dos blocos ocupa várias linhas. Eu preciso que eles ocupem uma linha no seguinte formato
Participant Date Time Block Word1 Correct1 Time1.....Word36 Correct36 Time36
2456 1 Happy 1 1200 sad 0 1500
.
.
.
1234 5 sad 0 1100 happy 1 900
A questão é que os blocos 3 e 5 têm 36 estímulos, enquanto os blocos 1, 2 e 4 têm 12. Eu preciso do participante, datetime e tempo de bloco em cada linha também.
Aqui está o script que colocou os dados no formulário que você vê aqui, mas ele não me fornece cada bloco em uma linha, que é o que eu preciso.
BEGIN{
FS="\";
RS="#";
OFS=",";
ORS="\n";
}{
for(i=1;i<=NF;i++) {printf "%-10s", $i; printf ",";}
}
Estou usando o gawk versão 3.1.6 no Ubuntu 10.04.