[완료] 열의 데이타에서 중복된 내용만 제거 하기 ?

서지훈의 이미지

지금 처리해야할 데이타 형식은 아래와 같습니다.

field1,value1,value2,value3
field2,value1,value2,value3
field3,value1,value2,value3
...

이런 구조의 데이타에서 value1, value2, value3중에서 중복된 값이 있을 경우 이 값을 제거 하고 싶습니다.
여기에 대한 좋은 아이디어 있으면 추천 받습니다.
외부 command든 구현 알고리즘이든 모든것 환영합니다.

야근 없는 주말을 위해 ~~~

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

M.W.Park의 이미지

필드 구분이 witespace이면 아주 간단합니다.

uniq -f 1 test.txt

첫 필드의 자릿수가 고정이라면,

uniq -s 6 test.txt

연속된 라인만 중복 제거를 하므로 sort를 이용해 적절히 정렬 후 사용하시면 될듯...

-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

pung96의 이미지

문제가 잘 이해가 안되네요 -_-;;; 예제를 적어주세요

예를 들어 데이터가

field1,2,1,1
field2,3,2,4
field3,2,1,1

라면 어떤 결과가 나와야하나요?

서지훈의 이미지

field1,2,1
field2,3,2,4
field3,2,1

결과는 이와 같이 field1과 field3에서 중복되는 값을 제거 해야 합니다.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

Prentice의 이미지

field1,9,9,9
field2,2,1,2
field3,8,8,9

field1,9
field2,2,1
field3,8,9

이렇게 되는 것인가요?

서지훈의 이미지

네...
근데... value값은 같은 행에선 순서에 구애를 받지 아니하구요 ㅎㅎ;

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

aero의 이미지

데이터

field1,2,1,1
field2,3,2,4
field3,2,1,1

코드 1

#!/usr/bin/perl
use strict;
use warnings;
 
open my $fh, '<', $ARGV[0];
while(<$fh>) {
    chomp $_;
    my @array = split /,/, $_;
    my %seen = ();
    my @uniq = grep { ! $seen{$_}++ } @array[1 .. $#array];
    print join( ',', ($array[0],@uniq) ),"\n";
}

List::MoreUtils 모듈의 uniq함수를 사용한 버젼

#!/usr/bin/perl
use strict;
use warnings;
use List::MoreUtils qw(uniq);
 
open my $fh, '<', $ARGV[0];
while(<$fh>) {
    chomp $_;
    my @array = split /,/, $_;
    print join( ',', ($array[0], uniq(@array[1 .. $#array]) ) ) ,"\n";
}

perl code.pl data.txt 결과

field1,2,1
field2,3,2,4
field3,2,1
서지훈의 이미지

오... 굿 ~~~ -_-b
바로 해결 되네요.
근데... 이게 오버헤드가 많이 걸리는 안되는 작업인데...
포퍼먼스 괜찮겠죠 ? ㅎㅎ;

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

pung96의 이미지

perl을 이용한 다른 방법입니다. 속도는 느릴테지만, 그냥 재미로

http://codepad.org/1HNv5TwE

#!/usr/bin/perl
 
use strict;
 
my @data=qw{
field1,2,1,1,1,2,2,3,1,1,1,5,3
field2,3,2,4
field3,2,1,1
};
 
my @new=@data;
#느리지만 재밌는 방법
#perl -nle'1while s/((,[^,]+?).*?)\2/$1/g;print' data.txt 와 동일
map{ 1while s/((,[^,]+?).*?)\2/$1/g;print $_,"\n" } @new;
 
@new=@data;
#일반적인 방법(aero님의 것과 같음)
#perl -nle'my%h;$f,@v)=split",",$_;print join",",$f,grep{!$h{$_}++;}@v' data.txt 와 동일
map{ my%h;my($f,@v)=split",",$_;print join",",$f,grep{!$h{$_}++;}@v; print"\n" } @new;
 
#순서가 상관없고, field1, field2등이 없을때 간단한 방법.
map { my%h;@h{split/,/,$_}++;print join(',',keys%h),"\n" } @data;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.