Script to complete all fields of template

Hello gurus;

I need to do a script to complete a technical template and I don't have idea to how to do :wall: I've try with bash and awk or sed but my brain is empty in this script. I need help please.

The incoming file is a csv with an index number, first occurence in the possition of the element, the number of line for the element, type of element and name of the element, this is an example of imput file:

1;0;1;Service;TEST Operating;;;;;;;;;;;;;;;;;;;
2;1;1;System;LoadBalancer_5;;;;;;;;;;;;;;;;;;;
3;2;1;System;HTTP_Server_4;;;;;;;;;;;;;;;;;;;
4;3;1;System;AS_KXKK1;;;;;;;;;;;;;;;;;;;
5;4;1;System;LDAP;;;;;;;;;;;;;;;;;;;
6;5;1;Component;LDAP;;;;;;;;;;;;;;;;;;;
7;4;2;Component;p_TEST;;;;;;;;;;;;;;;;;;;
8;4;3;Component;WASSRV5;;;;;;;;;;;;;;;;;;;
9;3;4;System;AS_KXKK2;;;;;;;;;;;;;;;;;;;
10;4;4;System;LDAP;;;;;;;;;;;;;;;;;;;
11;5;4;Component;LDAP;;;;;;;;;;;;;;;;;;;

This is an explanation of the first line of the imput file:

INDEX;POSSITION_IN_LINE;NUMBER_OF_LINE;TYPE_OF_ELEMENT;ELEMENT
1;0;1;Service;TEST Operating;;;;;;;;;;;;;;;;;;;

The idea is generate an output file with all type of elements and elements filled and if no previus element in the line is complete i need put the same element that is in the upper row:

1;Service;TEST Operating;System;Loadbalancer_5;System;HTTP_Server_4;System;AS_KXKK1;System;LDAP;Component;LDAP;;;;;;
2;Service;TEST Operating;System;Loadbalancer_5;System;HTTP_Server_4;System;AS_KXKK1;Component;p_krex;;;;;;;;
3;Service;TEST Operating;System;Loadbalancer_5;System;HTTP_Server_4;System;AS_KXKK1;Component;WASSRV5;;;;;;;;
4;Service;TEST Operating;System;Loadbalancer_5;System;HTTP_Server_4;System;AS_KXKK2;System;LDAP;Component;LDAP;;;;;;

The line one puts each possition, the first line is easy because I have all elements with the "NUMBER_OF_LINE" field but in the rest of lines I don't have idea that how complete with the rest of elements.

Please help me :confused::confused::confused:

I've attached two example files to try explain better that my english :smiley: sorry for that.

May thats for your time.

Ren

It is doable in pure bash and in awk.
Your attached files are in WinDOS format where awk provides an easy conversion.

awk -F\; '
{
# WinDOS to Unix
  sub("\r$","")
}
function printout() {
# assemble the line in the correct sequence
  line=nr
  for (i=0; (i in out); i++) line=line out
  print line
}
($3!=nr) {
  if (NR>1) printout()
  nr=$3
}
{
# cut the first three fields
  i=$2
  sub("[^;]*;[^;]*;[^;]*","")
  out=$0
}
END {
  if (NR>0) printout()
} 
' imput.txt
1 Like

Awesome MadeInGermany;

Only one comment, is possible fill only to up until the last ocurrence of line. I'll try to explain:

If the line number 2 only have "Component;P_TEST" in the possition 4, can I fill the line two without the fields beyond the last element of the line? I only need fill the elements before the last element of each line.

For instance:

Imput line for line 2:

7;4;2;Component;p_TEST

I need the output

2;Service;TEST Operating;System;Loadbalancer_5;System;HTTP_Server_4;System;AS_KXKK1;Component;p_TEST;;;;;;;;

Instead of

2;Service;TEST Operating;System;Loadbalancer_5;System;HTTP_Server_4;System;AS_KXKK1;Component;p_TEST;Component;LDAP;;;;;;;

Thanks a lot for your support :b::b::b:

Ren