У меня есть файл
input.txt
ID04120;2017-12-27;Office One;2017-12-27;Merchan Dep;2017-12-27;Sales Team 1;2017-12-27;Merchan Dep;2017-12-28;XXX4615;2017-12-28;XXX4615;2018-03-06;Office One;2018-03-06;Office One
ID04123;2017-12-28;Office One;2017-12-28;XXX4616;2018-04-05;Office One
ID04130;2017-12-29;Office One;2017-12-29;Room Fabric;2017-12-29;Support;2017-12-29;XXX4497;2018-01-17;Office One;2018-01-17;XXX4497;2018-01-17;Sales Team 3;2018-01-17;XXX4497;2018-03-13;Dev-sales-id;2018-03-14;XXX4497;2018-03-16;Dev Fabric
ID04266;2018-01-13;Office One;2018-01-13;XXX4186;2018-02-20;XXX4186;2018-02-22;XXX4186;2018-03-01;Office One
Мой журнал имеет разные номера полей, может иметь 7 или более полей, не является константой, разделенной знаком ";"
как в примере, где я могу иметь 7,11,17 или 23 поля
Мне нужно получить первую запись XXX [0-9] {4} и ее дату (предыдущее поле), а также какой сектор компании был до него и упорядочить их в конце строки.
запись XXX [0-9] {4} и ее дата (предыдущее поле) и другие ее записи XXX [0-9] {4} и их даты (предыдущее поле) не нужны, если мне нужно вырезать .
Ex:
от
ID04123; 2017-12-28; Office One; 2017-12-28; XXX4616 ; 2018-04-05; Office One
до
ID04123; 2017-12-28; Office One; 2018-04-05; Office One; 2017-12-28; Office One; XXX4616
вывод будет выглядеть так:
ID04120;2017-12-27;Office One;2017-12-27;Merchan Dep;2017-12-27;Sales Team 1;2017-12-27;Merchan Dep;2018-03-06;Office One;2018-03-06;Office One;2017-12-28;Merchan Dep;XXX4615
ID04123;2017-12-28;Office One;2018-04-05;Office One;2017-12-28;Office One;XXX4616
ID04130;2017-12-29;Office One;2017-12-29;Room Fabric;2017-12-29;Support;2018-01-17;Office One;2018-01-17;Sales Team 3;2018-03-13;Dev-sales-id;2018-03-16;Dev Fabric;2017-12-29;Support;XXX4497
ID04266;2018-01-13;Office One;2018-03-01;Office One;2018-01-13;Office One;XXX4186
я могу попробовать
awk --re-interval '
match($0,/[[:alnum:]]+;[0-9]{4}\-[0-9]{2}\-[0-9]{2};XXX+[0-9]{4}+.*XXX+[0-9]{4}+;[0-9]{4}\-[0-9]{2}\-[0-9]{2}|[[:alnum:]]+;[0-9]{4}\-[0-9]{2}\-[0-9]{2};XXX+[0-9]{4}+;[0-9]{4}\-[0-9]{2}\-[0-9]{2}/){
value2=substr($0,RSTART,RLENGTH);
num=split(value2,array,";");
print substr($0,1,RSTART-1) array[1],array[num],substr($0,RSTART+RLENGTH+1),array[2],array[1],array[3]
}' OFS=";" input.txt
но это не сработало