빈 줄로 구분된 필드 데이터를 사용하여 여러 txt를 CSV로 변환하는 방법

빈 줄로 구분된 필드 데이터를 사용하여 여러 txt를 CSV로 변환하는 방법

필드가 빈 줄로 구분된 여러 텍스트 파일에 일부 데이터가 있습니다. 필드는 4개뿐이지만 두 번째 필드에는 더 많은 하위 필드가 있습니다. 어쩌면 3개 이상이 될 수도 있습니다. 첫 번째 필드는 항상 숫자, 0 또는 1입니다.

0
name_surname
1 yellow 1 brown 2 green
 short description

모든 파일은 동일한 방식으로 만들어집니다. 문제는 세 번째 필드에 더 많거나 적은 색상을 가질 수 있다는 것입니다.

각 txt는 csv 파일의 한 줄이 되어야 합니다.

0 [tab] name_surname [tab] 1 yellow ; 1 brown; 2 green [tab] "description"
1 [tab] name2_surname [tab] 1 brown; 1 blue [tab] "description"

좀 읽은 후에 어떻게든 awk를 사용해야 한다는 것을 알았지만 그건 내 능력 밖의 일이었습니다.

답변1

나는 사용 방법을 알고 있습니다 sed:

#!/bin/sed -nf
# Read second line & save first two lines to hold
N; h
# Read third line and perform transform
n; s/\([0-9]\+ [a-zA-Z]\+\) /\1; /g
# Append it to hold
H
# Give hold back
g
# Read fourth line
N
# Transform newlines
s/\n/\t/g
# Print result
p

또는 한 줄로:

sed -n 'N;h;n;s/\([0-9]\+ [a-zA-Z]\+\) /\1; /g;H;g;N;s/\n/\t/g;p' data.txt

답변2

sed또 다른 해결책 은 다음과 같습니다 .

sed '/./!d;/[^0-9]/{
        /^[0-9]/s/ [0-9] / ;&/g
        H;$!d
    };x;y/\n/<tab>/
' <<\DATA
0
name_surname
1 yellow 1 brown 2 green
 short description

1
name2_surname
2 paisley 4 yellow 1 brown 2 green
 short description
2
name3_surname
1 blue
 short description
DATA

실제 문자 여야 <tab>합니다 .y/\n/<tab>/<tab>

###OUTPUT###

0       name_surname    1 yellow ; 1 brown ; 2 green     short description
1       name2_surname   2 paisley ; 4 yellow ; 1 brown ; 2 green         short description
2       name3_surname   1 blue   short description

관련 정보