Jake Petroules
Jake Petroules

Reputation: 24140

Shell scripting - replace every 5 commas with a newline

How can I replace every 5th comma in some input with a newline?

For example:

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

becomes

1,2,3,4,5
6,7,8,9,10
11,12,13,14,15

Looking for a one-liner using something like sed...

Upvotes: 4

Views: 2146

Answers (5)

William Pursell
William Pursell

Reputation: 212218

The accepted solution works, but is overly complicated. Try:

sed ':d s/,/\n/5; P; D; Td'

Not all sed allow commands to be separated by semi-colons, so you may need a literal newline after each semi-colon. Also, I'm not sure that all sed allow a label followed by a command, so a literal newline may be required before the s command. In other words:

 sed ':d
s/,/\n/5
P
D
Td'

Upvotes: 1

Vijay
Vijay

Reputation: 67211

nawk -F, '{for(i=1;i<=NF;i++){printf("%s%s",$i,i%5?",":"\n")}}' file3

test:

pearl.246> nawk -F, '{for(i=1;i<=NF;i++){printf("%s%s",$i,i%5?",":"\n")}}' file3
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
pearl.247>

Upvotes: 0

kev
kev

Reputation: 161614

$ echo -n 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 | xargs -d, printf '%d,%d,%d,%d,%d\n'
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15

Upvotes: 1

Shiplu Mokaddim
Shiplu Mokaddim

Reputation: 57650

This expression will do.

sed 's/\(\([0-9]\+,\)\{4\}\)\([0-9]\+\),/\1\3\n/g'

http://ideone.com/d4Va2

Upvotes: 1

Dennis
Dennis

Reputation: 14477

This should work:

sed 's/\(\([^,]*,\)\{4\}[^,]*\),/\1\n/g'

Example:

$ echo "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15" |
> sed 's/\(\([^,]*,\)\{4\}[^,]*\),/\1\n/g'
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15

Upvotes: 5

Related Questions