줄의 첫 번째 쉼표 뒤에 csv 형식 파일의 형식을 지정하는 방법은 무엇입니까?

줄의 첫 번째 쉼표 뒤에 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", ...

당신의 도움을 주셔서 감사합니다.

답변1

@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. 

답변2

이것이 당신이 찾고 있는 것일 수도 있습니다:

$ 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

답변3

IFS=, ; while read label string; do echo "\"$label\",$(echo $string| sed -e 's/\(.\)/\"\1\",/g' -e 's/,$//') "; done < inputfile

  • IFS를 ','로 설정하여 변환할 태그와 문자열로 분할
  • 줄부터 시작하여 한 줄씩 읽습니다.
  • sed가 "."(= 각 문자)를 '"char",'...로 바꾸도록 합니다.
  • 줄 끝의 ","를 제거합니다.

답변4

다음 명령을 사용하여 테스트하면 훌륭하게 작동합니다.

주문하다

for i in `cat o.txt`; do j=`echo $i | awk -F "," '{print $1}'`; echo $i | awk -F "," '{print $2}'| sed 's/\(.\)/"&",/g'| awk -v j="$j" '{print j","$0}'| sed 's/^/"/g'| sed 's/,/"&/1'| sed 's/,$//g'; done

여기서 o.txt==> 파일 이름

관련 정보