CSV 파일에서 예기치 않은 줄 바꿈

CSV 파일에서 예기치 않은 줄 바꿈

예기치 않은 줄 바꿈이 있는 csv 파일이 있습니다. 파일은 대략 다음과 같습니다.

col1; col2; col3; col4
 1a;   1b;   1c;  1d   
 2a;   2b;   2c   
;2d                   # this should be in the row above 
 3a;   3b;   3c;  3d

;이전 줄부터 시작하여 각 줄을 연결한 다음 삭제 하고 싶습니다 . 어떻게 해야 하나요?

답변1

$ sed -e '
    :loop
       $!N
       s/\n;/;/
    tloop
    P;D
 ' file.csv

항상 패턴 공간에 두 개의 라인을 유지하십시오. 다음 줄 시작 부분에 세미콜론이 보이면 개행 문자를 자르고 루프백하여 다음 줄을 패턴 공간으로 읽어옵니다.

다음 줄에 세미콜론이 없으면 루프를 종료하고 첫 번째 개행 문자까지 인쇄한 다음 해당 부분을 삭제하고 반환하여 다음 줄을 패턴 공간에 추가합니다.

답변2

어때요?:

awk -F ';' '{while (NF < 4) {getline nextline; $0 = $0 nextline}} 1' file

답변3

다음 sed스크립트가 필요할 수 있습니다.

sed -n '$p;N;s/[[:blank:]]*\n[[:blank:]]*;/;/;P;D' csv_file

고장 설명:

$p;      # at last line of stream, just print it
N;       # append the next line from input so that we always consider two lines at a time ...
s/[[:blank:]]*\n[[:blank:]]*;/;/; # then replace `\n;` (and any leading and trailing blanks) with just `;`, and ...
P;       # print only the _first_ of the two lines present in memory and ...
D        # then delete it and read one new line if memory becomes empty

첫 번째 명령은 $p입력 라인의 총 개수가 홀수인 경우에만 실제로 무언가를 인쇄합니다. 스크립트의 나머지 부분은 입력 스트림의 메모리에 항상 두 라인이 있도록 보장하기 때문입니다.

관련 정보