Shell Script – How to Format a File in CSV Format After the First Comma in a Line

awksedshell-scripttext formatting

I have a file in the following format:

Original format

ARX_10/model2,CEECCCCCHHHHSCSCCCSSCCCSCCCSSCSTTTCEEEETTTEECGGGTTTEEEEEETTTTEEEEEECSCCGGGCSCEEEEESSSSSSCEEEEEECCCCSCGGGCCCCBCCSCEECCTTCCEEEEEECCTHHHHHCCCCCCCSTTHHHHHHHHSSCCSTTTTTTTTTSSGGGTTTEEEEEETTTTEEEEEECSCCTTSCCCCCCCSCSSCCCCCCCEECCCSSCCBCCSEEECCTTCEEEEEEECCSSSSSSCCEEECSSSSSSCCCEESSCSSSBCCEECTTSCEEEEEEECTTSSTTSEEEEEESSCGGGCCEEEEEEESSCCCSCCCCCCCCCCSSSHHHHHHHHCCCCSCCCTTTSCCSCCCSTTTCEEEETTTEECGGGTTTEEEEEETTTTEEEEEECSCCGGGCSCEEEEESSSSSSCEEEEEECCCCSCGGGCCCCBCCSCEECCTTCCEEEEEECCTCSEEEEESSCGGGCCEEEEEEESSSCCCCCCCCCCCCHHHHHHHHHHHSSSSCCCCCCSSCCSSCCCSCCCCCCSSCCSSCCCSCCCCCCSSSCCC
ARX_10/model3,CTTSCCCTTTTTSEEEEECGGGSCEEEEECCCSSBCCCSCCCCCTTTCCCCCCCCSCBCCCCCCCCSBCCCCTTCEEEEEECCCCTTCCSCEEEEECCSSSCEEEEETTTEECGGGBTTBCCEECCSSSCCEEEEEESCCGGGSEEEEEEESSTTSSCEEEEEECCCCCCCSEEECCSSCCBCCCCBCCHHHHSSCEEEEEBCSSSCBCCSEETTTEECGGGTTTEEEEEETTTTEEEEEECSCCGGGCSBEEEEESSTTSCCCBCCEEECSSCCCCSCCCCCCCSCBCCCSSCCCCCCCCCCHHHHHSCCEEEEECCSTTCCEEEEEETTSCCSCHHHHHHHHHHHHHSSSCCHHHHHHHHHHHCSSCTTCCCCCCTTTCCTTSCCCCCCCSBCEECCSSCTTTTCCCBCCBCCCSSCCCCSCCEEECCSSCEEEEEEECCSSSSSSCCEEECSSSSSCCCCCCSSCSSSBCCBCCSSSCEEEEEEECCCSGGGCSEEEEESSCGGGCCEEEEEEESSSCCCCCCCCCCCCHHHHHHHHHHHSSSSCCCCCCSSCCSSCCC

The above is an example of the first two lines of the contents of the file. Every line following these two first lines is identical in format to the example provided. The first space is the name of the file (which can be of varying length depending on the name of the original, e.g. ARX, HOXA13, PABPN1, ARX_PA1, etc.) that was processed which is followed by a chain of characters separated from the name by a comma.

What I need is to learn how to turn this original format into a csv format with the title in quotes and every character following the name in quotes and separated from one another by a comma with no trailing commas at the end of the lines.

Sample output:

"ARX_10/model2","C","E","E","C","C","C","C","C","H","H","H", ...
"ARX_10/model3","C","T","T","S","C","C","C","T","T","T","T", ...

Thanks for your help.

Best Answer

This may be what you're looking for:

$ awk -F, -v OFS= '{$1="\""$1"\""; gsub(/./,",\"&\"",$2)} 1' file
"AModel_10/model1","A","A","A"
"ABCDEFGModel_11/model1","B","B","B"

The above was run against this input:

$ cat file
AModel_10/model1,AAA
ABCDEFGModel_11/model1,BBB
Related Question