Shell-Script
如何在一行中的第一個逗號之後以 csv 格式格式化文件?
我有一個格式如下的文件:
原始格式
ARX_10/model2,CEECCCCCHHHHSCSCCCSSCCCSCCCSSCSTTTCEEEETTTEECGGGTTTEEEEEETTTTEEEEEECSCCGGGCSCEEEEESSSSSSCEEEEEECCCCSCGGGCCCCBCCSCEECCTTCCEEEEEECCTHHHHHCCCCCCCSTTHHHHHHHHSSCCSTTTTTTTTTSSGGGTTTEEEEEETTTTEEEEEECSCCTTSCCCCCCCSCSSCCCCCCCEECCCSSCCBCCSEEECCTTCEEEEEEECCSSSSSSCCEEECSSSSSSCCCEESSCSSSBCCEECTTSCEEEEEEECTTSSTTSEEEEEESSCGGGCCEEEEEEESSCCCSCCCCCCCCCCSSSHHHHHHHHCCCCSCCCTTTSCCSCCCSTTTCEEEETTTEECGGGTTTEEEEEETTTTEEEEEECSCCGGGCSCEEEEESSSSSSCEEEEEECCCCSCGGGCCCCBCCSCEECCTTCCEEEEEECCTCSEEEEESSCGGGCCEEEEEEESSSCCCCCCCCCCCCHHHHHHHHHHHSSSSCCCCCCSSCCSSCCCSCCCCCCSSCCSSCCCSCCCCCCSSSCCC ARX_10/model3,CTTSCCCTTTTTSEEEEECGGGSCEEEEECCCSSBCCCSCCCCCTTTCCCCCCCCSCBCCCCCCCCSBCCCCTTCEEEEEECCCCTTCCSCEEEEECCSSSCEEEEETTTEECGGGBTTBCCEECCSSSCCEEEEEESCCGGGSEEEEEEESSTTSSCEEEEEECCCCCCCSEEECCSSCCBCCCCBCCHHHHSSCEEEEEBCSSSCBCCSEETTTEECGGGTTTEEEEEETTTTEEEEEECSCCGGGCSBEEEEESSTTSCCCBCCEEECSSCCCCSCCCCCCCSCBCCCSSCCCCCCCCCCHHHHHSCCEEEEECCSTTCCEEEEEETTSCCSCHHHHHHHHHHHHHSSSCCHHHHHHHHHHHCSSCTTCCCCCCTTTCCTTSCCCCCCCSBCEECCSSCTTTTCCCBCCBCCCSSCCCCSCCEEECCSSCEEEEEEECCSSSSSSCCEEECSSSSSCCCCCCSSCSSSBCCBCCSSSCEEEEEEECCCSGGGCSEEEEESSCGGGCCEEEEEEESSSCCCCCCCCCCCCHHHHHHHHHHHSSSSCCCCCCSSCCSSCCC
以上是文件內容前兩行的範例。前兩行之後的每一行在格式上都與提供的範例相同。第一個空格是已處理文件的名稱(其長度可能因原始文件的名稱而異,例如 ARX、HOXA13、PABPN1、ARX_PA1 等),後面是與用逗號命名。
我需要學習如何將這種原始格式轉換為 csv 格式,標題用引號括起來,每個字元都用引號括起來,並用逗號分隔,行末沒有逗號。
樣本輸出:
"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", ...
謝謝你的幫助。
這可能是您正在尋找的:
$ awk -F, -v OFS= '{$1="\""$1"\""; gsub(/./,",\"&\"",$2)} 1' file "AModel_10/model1","A","A","A" "ABCDEFGModel_11/model1","B","B","B"
以上是針對此輸入執行的:
$ cat file AModel_10/model1,AAA ABCDEFGModel_11/model1,BBB
根據@Phillipos 的建議:
sed 'h;s/.*,//;s/./,"&"/g;x;G;s/,.*\n/"/;s/^/"/' inp.csv
解釋:
將模式空間分成兩部分,分別對它們進行操作,然後將它們組合在一起。
perl -lpe '$_ = q["] . join(q[","], unpack sprintf "A%dx(A)*", index $_, ",") . q["]' inp.csv
簡要說明:
° Construct the unpacking format for the input line by finding the location position of the comma, skip the comma from unpack, remaining are unpacked a char each. Then joined with the string ",", finally all enclosed in double quotes.