awkрешение:
awk -F'|' 'NF>1 && $2~/[^,]+,[^,]*/{
len=split($2,a,",");
for(i=1;i<=len;i++) {
if(a[i]!="") print $1,a[i]
}
next }1' OFS='|' file
Выход:
Item1|keys
Item1|books
Item1|helmet
Item1|handle
Item2|Bike
Item3
Item4|Tyre
Item4|brakes
Item4|headlight
Item4|clamps
Item4|rollergrip
Item5|Nails
Item5|hammers
Детали:
-F'|'
-разделитель полей
NF>1 && $2~/[^,]+,[^,]*/
-учитывает как минимум 2 поля со значениями, разделенными запятыми -во втором поле
len=split($2,a,",")
-разделить второе поле на массив a
с помощью разделителя ,
. Переменной len
присваивается размер массива (количество чанков)
for(i=1;i<=len;i++)
перебор " фрагментов "
if(a[i]!="") print $1,a[i]
-распечатать все связанные последовательности, кроме пустых значений