2017-04-26 4 views
0

소프트에서 가져온 일부 CSV 파일에 문제가있어서 PostgreSQL 가져 오기 (CSV로 복사) 기능을 사용하고 싶습니다. file.csv 결과 FROM in_my_tableCSV 파일 누락 된 열을 패드하는 방법

a_b_c_d 
1_2_3_4 
5_6_7  <- last column missing 
8_9_0_1 
2_6_7  <- last column missing 

COPY은 다음과 같습니다 : 오류 : 데이터 누락 문제는 약간의 마지막 열이 (탭 구분 기호 값에 대한 헤더 문자, 숫자, _)처럼 누락이다 열 "D"수입에 대한 올바른 파일의

샘플 :

a_b_c_d 
1_2_3_4 
5_6_7_  <- null column but not missing 
8_9_0_1 
2_6_7_  <- null column but not missing 

내 질문은 : 올바른 /는 CoML를 만들기 위해 TAB 구분 기호를 추가하는 bash는/리눅스 쉘이 일부 명령입니다 모든 열이있는 ete/padded csv 파일

도움 주셔서 감사합니다.

+0

당신은 CSV로 한 열 테이블을 복사 한 다음이 데이터를 구분에서 MY_TABLE에 삽입 할 수있는 –

답변

1

좋아, 사실 내가 찾을 수 있도록이 :

50 TAB의 수입니다
awk -F'\t' -v OFS='\t' 'NF=50' input.csv > output.csv 

+ 1

1

당신은 나오지도 정규 표현식의 조합을 사용할 수 있습니다

sed -r 's/^[0-9](_[0-9]){2}$/\0_/g' file.csv 

는 당신은 당신 구분자 (\t)에 의해 _를 교체해야합니다.

2

awk가 좋습니다.

awk -F"\t" '{  # Tell awk we are working with tabs 
if ($4 =="")  # If the last field is empty 
    print $0"\t" # print the whole line with a tab 
else 
    print $0  # Otherwise just print the line 
}' your.csv > your.fixed.csv 
2

리눅스에 대해 많이 알고하지 않습니다하지만이 쉽게 편리 할 수있는 CSV 모듈이 훨씬 더 복잡 CSV의 오류를 수정 한

copy tableName from '/filepath/name.csv' delimiter '_' csv WITH NULL AS 'null'; 
1

펄과 같은 간단한 명령을 통해 PostgreSQL의에서 수행 할 수 . 내 우분투 테스트 시스템에서는 패키지 libtext-csv-perl의 일부입니다. 당신이 집 계기 구분 된 파일을 가지고 펄 다르게 "\t"'\t' 취급 명심 경우, sep_char"\t"

#! /usr/bin/perl 
use strict; 
use warnings; 
use Text::CSV; 

my $csv = Text::CSV->new ({ binary => 1, eol => $/, sep_char => '_' }); 

open my $broken, '<', 'broken.csv'; 
open my $fixed, '>', 'fixed.csv'; 

while (my $row = $csv->getline ($broken)) { 
    $#{$row} = 3; 
    $csv->print ($fixed, $row); 
} 

변경 :

는이 문제를 해결합니다.