The UNIX and Linux Forums  
Hej og Velkommen fra USA til UNIX og Linux Forums! Tak for dit besøg og deltager i vores globale samfund.

Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
Sådan fjernes dobbeltposter med ud sortere svenkatareddy Shell Programmering og Scripting 19 06-11-2008 03:10 PM
Sådan fjernes dobbeltposter med ud sortere svenkatareddy Sun Solaris 2 02-28-2008 08:38 AM
Dupliker optegnelser fra Oracle til tekstfil. shilendrajadon UNIX for Advanced & Ekspertsøgning Brugere 1 01-10-2008 11:21 AM
Slet Dubler optegnelser fra en tilde afgrænset fil irshadm Shell Programmering og Scripting 5 12-06-2007 05:36 AM
Fjern Dubler linjer fra fil Nysif Steve UNIX for dummyer Spørgsmål & svar 18 09-09-2007 09:57 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Søg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 12-11-2007
vukkusila vukkusila is offline
Registreret Bruger
  
 

Join Date: Aug 2007
Stillinger: 6
Fjern alle forekomster af dobbeltposter fra fil

Hej eksperter,
Jeg er ny til scripting. Jeg har et krav som nedenfor.

File1:

A | 123 | NAME1
A | 123 | NAME2
B | 123 | NAME3

Fil2:

C | 123 | NAME4
C | 123 | NAME5
U | 123 | NAME6

1) Jeg har 2 fusionere både filer.
2) behovet for at gøre en slags (centrale felter er første og andet felt)
3) at fjerne alle forekomster af dubletter fra den fusionerede fil og skrive skrive alle disse eksemplarer forekomster i én fil.
4) resten af de registre, som er enestående i den oprindelige kilde filer, der skal skrives ind i en anden fil

outfiles:

fil3:
A | 123 | NAME1
A | 123 | NAME2
C | 123 | NAME4
C | 123 | NAME5

File4:

B | 123 | NAME3
U | 123 | NAME6

Please hjælp mig med den løsning, som jeg er i virkelig presserende. Sætter pris på din hjælp.

Tak
  #2 (permalink)  
Old 12-12-2007
user_prady user_prady is offline
Registreret Bruger
  
 

Join Date: Sep 2007
Posts: 163
Citat:
Oprindeligt Indsendt af vukkusila View Post
Hej eksperter,
Jeg er ny til scripting. Jeg har et krav som nedenfor.

File1:

A | 123 | NAME1
A | 123 | NAME2
B | 123 | NAME3

Fil2:

C | 123 | NAME4
C | 123 | NAME5
U | 123 | NAME6

1) Jeg har 2 fusionere både filer.
2) behovet for at gøre en slags (centrale felter er første og andet felt)
3) at fjerne alle forekomster af dubletter fra den fusionerede fil og skrive skrive alle disse eksemplarer forekomster i én fil.
4) resten af de registre, som er enestående i den oprindelige kilde filer, der skal skrives ind i en anden fil

outfiles:

fil3:
A | 123 | NAME1
A | 123 | NAME2
C | 123 | NAME4
C | 123 | NAME5

File4:

B | 123 | NAME3
U | 123 | NAME6

Please hjælp mig med den løsning, som jeg er i virkelig presserende. Sætter pris på din hjælp.

Tak
Hvis jeg ikke tager fejl din hver post i fil1 og fil2 synes at være unikke data. Jeg er opmærksom på det sidste tegn i dine filer.

Så hvis alle data er unikke alle posterne bør gå til File4 .. Er det ikke?

Forklare mere klart, så du ll få et hurtigt svar fra dette forum.
Tro mig her i dette forum virkelig geniale og eksperter her for at hjælpe dig ud når som helst ..

bortset fra mig ..

Skål
user_prady
  #3 (permalink)  
Old 12-12-2007
Klashxx's Avatar
Klashxx Klashxx is offline Forum Advisor  
HP-UX/Linux/Oracle
  
 

Join Date: Feb 2006
Beliggenhed: Almería, Spanien
Posts: 393
Prøv noget lignende:
Code:
 sort -t'|' -k 1,1 File1 File2|awk -F\| 'BEGIN{i=0}{
                              pat=$1"|"$2
                              ocurrences[pat]++
                              line[i]=$0
                              i++
       }
       END {
          for (j=0;j<i;j++)
              {
              pat=substr(line[j],1,5)
              if (ocurrences[pat]>1)
                print line[j]>>"File3"
              else
                print line[j]>>"File4"
              }
      }'
  #4 (permalink)  
Old 12-12-2007
radoulov's Avatar
radoulov radoulov is online now Forum Staff  
narkoman
  
 

Join Date: Jan 2007
Beliggenhed: Варна, България / Milano, Italia
Indlæg: 2.877
En anden slags / awk løsning
(hvis dine filer ikke allerede er sorteret som de prøver, du posted):

Code:
sort -t\| -k1,2 file1 file2|awk '{
	x[$1,$2]++
	y[NR] = $0
} END {
	for (i = 1; i <= NR; i++)
		print y[i] > ((x[substr(y[i],1,5)] > 1) ? "file3" : "file4")
}' SUBSEP="|" FS="|"
Brug nawk eller / usr/xpg4/bin/awk på Solaris.

PS For variabel kolonnebredden: du bør ikke bruge substr, men opdelt for eksempel:

Code:
sort -t\| -k1,2 file1 file2|awk '{
	x[$1,$2]++
	y[NR] = $0
} END {
	for (i = 1; i <= NR; i++)
		{
			tmp = y[i]
			split(tmp,z)
			print tmp > ((x[z[1],z[2]] > 1) ? "file3" : "file4")
	}
}' SUBSEP="|" FS="|"

Senest redigeret af radoulov; 12-12-2007 kl 08:16 AM..
Closed Thread

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 09:21 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0