text manipulation

Hi All;
i need to do text processing :
I have a file:
file1.txt
>>>>>>>>>>>>
30 2 23 some
30 2 22 text
30 2 21 xyz
30 2 20 ttttt
30 2 19 ttttt-1
30 2 18 xryz
30 2 17 xyzr
30 2 16 xy111z
30 2 15 xanyyz
30 2 14 xzz
30 2 13 xyy
30 2 0 zzz-w
50 3 25 zzz-w
50 3 12 productw
50 3 10 xyz20
50 3 9 eeeee
50 3 8 rrrr-1-77
50 3 7 producti
50 3 5 xyz
50 3 4 xyz40
50 3 3 xyz30
50 3 2 xyz
50 3 1 asdf-2
50 3 21 xasdf
50 3 22 xy30
50 3 23 product-2
50 5 24 asdf-2
50 5 4 ttttt-1-77
50 3 19 ttttt-77
50 3 18 xyz77
50 3 17 xyz
50 3 15 prod-cc
60 1 2 aaa
60 1 5 bbb
60 1 10 ccc
>>>>>>>>>>>>>>>>>>

the processing required is to have an output which is :
sorting the lines according to( the 3rd column for each 1st and 2nd columns) knowing that the 3rd column sorting for each 1st,2nd column should start from 0 and end with 50 .

i mean :for each 1st and 2nd columns values: sort the 3rd column from 0 to 50 and if a value between 0 and 50 in 3rd column is missing we should fill the same 1st,2nd columns value as for the other values and the 3rd column with the missing value and the fourth column with Nothing.

example :for the pair (60 1 3rd string) in file1 above:
we have :
60 1 2 aaa
60 1 5 bbb
60 1 10 ccc

the output for only the ( 60 1 x string) should be:
60 1 0 nothing
60 1 1 nothing
60 1 2 aaa
60 1 3 nothing
60 1 4 nothing
60 1 5 bbb
......
60 1 6-9 nothing
.....
60 1 10 ccc
60 1 11 nothing
.....
....
60 1 50 nothing

please help.

This is for sorting...

 
$ sort -n -k 1,1 -k 2,2 -k 3,3 test
30 2 0 zzz-w
30 2 13 xyy
30 2 14 xzz
30 2 15 xanyyz
30 2 16 xy111z
30 2 17 xyzr
30 2 18 xryz
30 2 19 ttttt-1
30 2 20 ttttt
30 2 21 xyz
30 2 22 text
30 2 23 some
50 3 1 asdf-2
50 3 2 xyz
50 3 3 xyz30
50 3 4 xyz40
50 3 5 xyz
50 3 7 producti
50 3 8 rrrr-1-77
50 3 9 eeeee
50 3 10 xyz20
50 3 12 productw
50 3 15 prod-cc
50 3 17 xyz
50 3 18 xyz77
50 3 19 ttttt-77
50 3 21 xasdf
50 3 22 xy30
50 3 23 product-2
50 3 25 zzz-w
50 5 4 ttttt-1-77
50 5 24 asdf-2
60 1 2 aaa
60 1 5 bbb
60 1 10 ccc

---------- Post updated at 01:16 PM ---------- Previous update was at 01:03 PM ----------

Try this.. not tested.. as i dont have seq command in solaris

 
nawk '{print $1,$2}' test | sort | uniq | while read line; do for i in `seq 1 60`; do grep -w "$line $i" test || echo "$line $i nothing"; done;done | sort -n -k 1,1 -k 2,2 -k 3,3

---------- Post updated at 01:16 PM ---------- Previous update was at 01:16 PM ----------

test is the filename

Another homework... :frowning:

Try...

awk 'function f(){for(i=1;i<=50;i++)print p,i,a?a:n;delete a}($1 OFS $2)!=p&&NR>1{f()}{p=$1 OFS $2;a[$3]=$4}END{f()}' n=nothing file1 > file2

Thank you very much ,both ways did the job successfully.