빈 열이 있는 경우 열을 여러 열로 분할

빈 열이 있는 경우 열을 여러 열로 분할

다음과 관련해 도움이 필요합니다.

A
B
C

1
2

Q
W
A

빈 열을 찾을 때마다 해당 열을 새 열로 분할합니다.

산출:

A,1,Q   
B,2,W
C,,A

Sed를 사용했는데 분할할 키워드를 찾을 수 없습니다. 데이터가 너무 많아서 효율적으로 처리할 수 있는 방법이 없을까요?

감사해요

답변1

$ csplit -zsf file ip.txt /^$/+1 {*}
$ paste -d, file* | head -n -1
A,1,Q
B,2,W
C,,A

매뉴얼에서:

분할- 파일을 컨텍스트 라인에 따라 결정된 부분으로 분할

-z, --elide-빈 파일빈 출력 파일 제거

-s, --quiet, --silent출력 파일 크기 수를 인쇄하지 않음

-f, --prefix=접두사'xx' 대신 PREFIX를 사용하세요.

반죽- 파일 라인 병합

-d, --delimiters=목록TAB 대신 LIST의 문자 재사용

head -n -1마지막 행을 삭제하려면 다음을 사용할 수도 있습니다.sed '$d'

답변2

$ cat tst.awk
BEGIN { RS=""; FS="\n"; OFS="," }
{
    numRows = (NF>numRows ? NF : numRows)
    numCols = colNr = NR
    for (rowNr=1; rowNr<=NF; rowNr++) {
        vals[rowNr,colNr] = $rowNr
    }
}
END {
    for (rowNr=1; rowNr<=numRows; rowNr++) {
        for (colNr=1; colNr<=numCols; colNr++) {
            printf "%s%s", vals[rowNr,colNr], (colNr<numCols ? OFS : ORS)
        }
    }
}

.

$ awk -f tst.awk file
A,1,Q
B,2,W
C,,A

위의 내용은 모든 입력을 메모리에 저장하므로 YMMV는 "거대한"의 의미에 따라 다릅니다 I have huge data. 입력과 같이 단지 수백만 개의 빈 줄로 구분된 청크라면 괜찮지만, 테라바이트 규모의 데이터라면 그럴 수 있습니다. 작동하지.

관련 정보