Move text in a unix flat file

I've got a file of IDs that basically looks as follows :

123456789AAAAA
123456790AAAAA
123456791AAAAA

and I want to edit that file (into another file) and swap the data elements around so that it looks like :

AAAAA123456789
AAAAA123456790
AAAAA123456791

(ie 5 char code followed by 9 char code)

How can I do that in one statement?  I managed to use cut so that that I could get the 9 chars :

cat file_in | cut -c0-9 > file_out

but that's not enough.  Do I need a sed statement?
JoHarrisAsked:
Who is Participating?
 
cjjcliffordCommented:
you don't even need the cut, a simple "sed" will do it...


sed 's/^\(.....\)\(.........\)/\2\1/' file_in > file_out

Note this is hardcoded to 5 leading characters, and 9 trailing characters...

0
 
cjjcliffordCommented:
That will transpose the first 14 characters, leaving anything else in the line in-place. If this is not desirable then extend the regex:

sed  's/^\(.....\)\(.........\).*$/\2\1/'


Also, you may want to search for matches that are strictly characters ([A-Z]) or strictly numerics ([0-9]) rather than any 5/9 characters.
0
 
cjjcliffordCommented:
Also, using bounds may be an easier way of argumenting the number of characters...

so...

using bounds, and strictly characters/numbers, stripping any suplurfous characters after first 14:

sed 's/^\([A-Z]\{5\}\)\([0-9]\{9\}\).*$/\2\1/' in_file > out_file


e.g.

$ echo ABCDE123456789extra | sed 's/^\([A-Z]\{5\}\)\([0-9]\{9\}\).*$/\2\1/'
123456789ABCDE

0
 
JoHarrisAuthor Commented:
Thats great thanks - the flat file will always contain the 9 followed by the 5 so the 1st one works a treat.

Thanks for helping me out so quickly!
0
 
cjjcliffordCommented:
:-)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.