Home > OS >  Extract String before bracket and create new line
Extract String before bracket and create new line

Time:03-15

I have data in below format

ABC-ERW  12344 ZYX 12345
FFANKN   2345  QW  [123457, 89053]
FAFDJ-ER 1234  MNO [6532, 789, 234578]

I want to create the data in below format using sed or awk.

ABC-ERW  12344 ZYX 12345
FFANKN   2345  QW  123457
FFANKN   2345  QW  89053
FAFDJ-ER 1234  MNO 6532
FAFDJ-ER 1234  MNO 789
FAFDJ-ER 1234  MNO 234578

I can extract the data before bracket but I don't know how to concatenate the same with data from bracket repeatedly.

My Effort :--

# !/bin/bash
while IFS= read -r line
 do
  echo "$line"
  cnt=`echo $line | grep -o "\[" | wc -l`
  if [ $cnt -gt 0 ]
    then
     startstr=`echo $line | awk -F[ '{print $1}'`
     echo $startstr
     intrstr=`echo $line | cut -d "[" -f2 | cut -d "]" -f1` 
     echo $intrstr       
 else 
   echo "$line" >> newfile.txt
 fi
done < 1.txt

I am able to get the first part and also keep the rows not having "[" in new file but I dont know how to get the values in "[" and pass it at end as number of variables in "[" keep changing randomly.

Regards

CodePudding user response:

With your shown samples, please try following awkcode.

awk '
match($0,/\[[^]]*\]$/){
  num=split(substr($0,RSTART 1,RLENGTH-2),arr,", ")
  for(i=1;i<=num;i  ){
    print substr($0,1,RSTART-1) arr[i]
  }
  next
}
1
'  Input_file
  • Related