#!/usr/bin/gawk -f # Awk script to process .azk files # Usage: # awk -f getdat.awk .azk # # or in unix: # # getdat.awk .azk # # will output to .txt # # Version 1.0 # # This script will be supported! # Send me any .azk files that trip it up and I will try and fix the script. # Matt Davis - matt.davis@mrc-cbu.cam.ac.uk - 6.5.99 BEGIN { FS = " " OFS = "\t" } $1 == "Subject" { # Read subject line gsub(/,/,"",$2) sub_num = $2 start = 0 for (field=1; field<=NF; field++) { # Find ID if (start == 1) { id[sub_num] = id[sub_num] $field " " } if($field == "ID") { start = 1 # rest of line is ID } } } $1 == "Item" { # Read item heading to start collecting data data = 1 if($3=="COT") { # if using rcot rcot[sub_num]++ # store for output } } $1 ~ /^\*+$/ { data = 0; datafile = FILENAME } # set FILENAME; start to read data $1 ~ /!/ { # read item errors if(item_error==0) { # add header for first error in each item error[sub_num] = "! Error in subject number " sub_num " marked by !!" } error[sub_num] = error[sub_num] "\n" $0 # keep error messages item_error = 1 } $1 ~ /^[0-9]+$/ && data == 1 { store_item[$1] store_rt[$1,sub_num]=$2 if(sub_num in rcot) { # if using RCOT store_rcot[$1,sub_num]=$3 # store clock on time } if ($1 > max_item) { max_item = $1 } if(item_error==1) { store_rt[$1,sub_num] = store_rt[$1,sub_num] "!!" } item_error = 0 } END { split(FILENAME,files,".") # set output filename output_file = files[1]".txt" print "Output from DMDX file:", FILENAME > output_file printf("Sub_Num"OFS) >> output_file for (subject=1;subject<=sub_num;subject++) { # print subject number printf(subject OFS) >> output_file if(subject in rcot) { # extra space for rcot printf(OFS) >> output_file } } printf("\n") >> output_file printf("Sub_ID"OFS) >> output_file for (subject=1;subject<=sub_num;subject++) { # print subject id printf(id[subject] OFS) >> output_file if (subject in rcot) { # print rcot for extra column of data printf("cot" OFS) >> output_file } } printf("\n") >> output_file for (item=0; item<=max_item; item++) { # for all possible items if(item in store_item) { # if stored printf(item OFS) >> output_file # print RT for (subject=1; subject<=sub_num; subject++) { printf(store_rt[item,subject] OFS) >> output_file if (subject in rcot) { # print clock on time printf(store_rcot[item,subject] OFS) >> output_file } } printf("\n") >> output_file } } for (subject=1;subject<=sub_num;subject++) { if (error[subject]!="") { print error[subject] >> output_file } } }