as long as you don't care about duplicates showing up multiple times, and "Time3:"
only exist once per row, must exist in every row, and no other pattern is immediately before a colon (:
) other than Time
N
then
a minimalist ERE regex
via awk
suffices - neither capturing groups nor lookahead/lookbehind are essential:
1 Timing=Time1:5/1,Time2:3/1,Time3:4/1,Time4:4/1
2 Timing=Time1:1/1,Time2:3/1,Time3:5/1,Time4:9/1
3 Timing=Time1:1/1,Time2:3/1,Time3:5/1,Time4:9/1
4 Timing=Time1:5/1,Time2:3/1,Time3:4/1,Time4:4/1
5 Timing=Time1:5/1,Time2:3/1,Time3:4/1,Time4:4/1
6 Timing=Time1:1/1,Time2:3/1,Time3:5/1,Time4:9/1
7 Timing=Time1:1/1,Time2:3/1,Time3:5/1,Time4:9/1
8 Timing=Time1:5/1,Time2:3/1,Time3:4/1,Time4:4/1
1 4
2 5
3 5
4 4
5 4
6 5
7 5
8 4
Since OFS
is an empty string anyway, doing ++NF
doesn't end up padding unwanted trailing spaces.
if you wanna generalize it and simply split up the components, try :
1 Timing | Time1 | 5 | Time2 | 3 | Time3 | 4 | Time4 | 4 |
2 Timing | Time1 | 1 | Time2 | 3 | Time3 | 5 | Time4 | 9 |
3 Timing | Time1 | 1 | Time2 | 3 | Time3 | 5 | Time4 | 9 |
4 Timing | Time1 | 5 | Time2 | 3 | Time3 | 4 | Time4 | 4 |
5 Timing | Time1 | 5 | Time2 | 3 | Time3 | 4 | Time4 | 4 |
6 Timing | Time1 | 1 | Time2 | 3 | Time3 | 5 | Time4 | 9 |
7 Timing | Time1 | 1 | Time2 | 3 | Time3 | 5 | Time4 | 9 |
8 Timing | Time1 | 5 | Time2 | 3 | Time3 | 4 | Time4 | 4 |
Obviously just [[:punct:]]
would work too, but you'll get back all the extra 1
s as well —- if they show up as values other than 1
at times then this might have some utility to it
You can also do it the RS
way but it's verbose and unseemly :
gawk NF RS='(^)?[^\n]+Time3:|/[^\n]+(\n|$)'