2010-08-04 8 views
0

다음과 같이 여러 개의 CSV가 있습니다.행당 중복 제거

일부 줄에는 중복 입력이있는 여러 개의 큰 텍스트 파일 (csv)이 있습니다. 즉, 병합 된 방식으로 인해 특정 필드는 종종 두 번 또는 세 번 같은 값을 갖게됩니다. 그것은 항상 같은 순서로 아니에요.

BWTL, 뉴스 레터, 뉴스 레터 옆
BWTL, 뉴스 레터, R2R, 뉴스 레터
MPWJ, 오타의 HOST, 오타의 HOST, 오타의 HOST
오타의 HOST, 익살스런, 오타의 HOST

등의 항목 서로 * .CSV

나오지

나오지 -i ""의/뉴스 레터, 뉴스 레터/뉴스 레터/g '로 정리하기에 충분 쉬운에 다른 중복을 해결하기 위해 유사한 빠른 방법이 있나요 ?

답변

0

당신은

sed -i "" 's/^\(.*NEWSLETTER.*\), NEWSLETTER/\1/g' eNewsletter.csv_new.csv 

그것은 두 번째 뉴스 레터 ^까지 모든 것을 캡처하여 작동 \(\) 캡처를 구분하는 라인의 시작을 의미하며, .* 전혀 아무 의미처럼 뭔가를 할 수 있습니다. 그런 다음 일치하는 문자열을 캡처 된 부분으로 바꿉니다.

+0

위대한 작품! 그러나 두 줄의 쉼표 나 쉼표를 사용하여 줄 끝 부분에 있습니다. – alex

+0

Doh! – deinst

+0

그 변경 (쉼표 추가)은 더 이상 중복을 제거하지 않도록합니다. 아니면 (내 sed 라인을 실행 한 후) 이제는 서로 옆에 있지 않은 중복에만 영향을 미친 것으로 보입니까? – alex

0
#!/bin/bash 

awk -F"," ' 
{ 
delete a 
for(i=1;i<=NF;i++){ 
gsub(/^ +| +$/,"",$i) 
if(!($i in a)) { 
    printf "%s,",$i 
    a[$i] 
} 
} 
print "" 
}' file 
0

시도 :

# Sort before using the uniq command 
sort largefile.csv | sort | uniq -d 

이는 서로 옆에 중복보고 있지만.