I need to use an awk script to extract some information from a file.
I have a title line which has 11 field and I split it to an array called titleList.
Student Number:Name:Lab1:Lab2:Lab3:Lab4:Lab5:Lab6:Exam1:Exam2:Final
After finding a proper line I need to print the fields which proceeds by the titles for example if the result is :
92839342:Robert Bloomingdale:9:26:18:22:9:12:25:39:99
I must print it in this way:
Student Number:92839342 Name:Robert Bloomingdale Lab1:9 Lab2:26 Lab3:18
Lab4:22 Lab5:9 Lab6:12 Exam1:25 Exam2:39 Final:99
I use a for loop to manage it:
for (i=0 ;i<=NF ;i++)
{
printf "%s %s %s %s",titleList[i],":",$i," "
}
everything look good except the result which has 2 problems:
first there is an extra space between each result and second the last field of the searched line is missing
Student Number : 92839342 Name : Robert Bloomingdale Lab1 : 9 Lab2 : 26
Lab3:18 Lab4 : 22 Lab5 : 9 Lab6 : 12 Exam1 : 25 Exam2 : 39 Final
what should I do?
is there any problem with \n at the end of the search result?
You can correct the amount of extra whitespace between fields by correcting the
printfstatement:Contents of
file.txt:Results:
EDIT:
Also, your missing the last value because the file you’re working with probably has windows newline endings. To fix this, run:
dos2unix file.txtbefore running yourawkcode. Alternatively, you can setawk‘s record separater so that it understands newline endings:EDIT:
The above requires GNU awk, split() splits on the FS by default so no need to use that as an arg, it’s common to use “next” rather than specifying opposite conditions, and it’s common to use print “” instead of printf “\n” so you use the ORS setting rather than hard-coding it’s value in output statements. So, the above should be tweaked to: