The UNIX and Linux Forums  
Hei og Velkommen fra USA til UNIX og Linux Forums! Takk for besøket og Delta i vårt globale samfunn.

Go Back   UNIX og Linux Forums > Top Forums > UNIX for Dummies Spørsmål og svar
.
google unix.com



UNIX for Dummies Spørsmål og svar Hvis du er usikker på hvor du skal legge inn en UNIX-eller Linux-spørsmålet, legger den her. Alle UNIX og Linux newbies velkommen!

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
telle antall ord i en linje satish @ 123 Shell programmering og Skripting 7 05-21-2008 03:59
Trenger du å identifisere linjen som inneholder @ mellom linjen av en fil b.paramanatti UNIX for Dummies Spørsmål og svar 4 11-04-2007 10:50
skille ord fra en linje? skyineyes Shell programmering og Skripting 3 06-26-2007 10:00
fjerne og duplikatlinje Ocelot UNIX for Dummies Spørsmål og svar 11 01-30-2007 12:44
Duplisert ord zulander UNIX for Dummies Spørsmål og svar 1 04-01-2001 04:11

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øk i denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 04-27-2007
srinivasan_85 srinivasan_85 is offline
Registrert bruker
  
 

Bli Date: Jan 2007
Innlegg: 28
Exclamation Finn dupliserte ord på en linje ved hjelp av kommandoen

Hei,
La meg forklare problemet klart:
La oppføringer i filen min være:
Code:
lion,tiger,bear
apple,mango,orange,apple,grape
unix,windows,solaris,windows,linux
red,blue,green,yellow
orange,maroon,pink,violet,orange,pink
Kan vi finne de linjene der ett av ordene (atskilt med feltet separator) forekommer mer enn en gang, ved hjelp av en kommando (eller kommando pipe)?
I dette tilfellet bør kommandoen oppdage linjene 2,3,5.

Jeg oppnådd det ved hjelp av en perl script (sitert nedenfor), men jeg lurer på om dette kan gjøres gjennom en kommando (problemet er at ingen. kolonner er ikke konstant).

Perl Programmet som jeg brukte:
Code:
$fname=<STDIN>;
chomp $fname;
open(file,"<$fname");
$found_dups=0;

for $line(<file>)
{
  chomp $line;
  @arr=split(/,/,$line);
  for($i=1;$i<=$#arr;$i++)
  {
     for($j=$i+1;$j<=$#arr;$j++)
     {
        if($arr[$i] eq $arr[$j])
        {
           print "tid $arr[0]\n";
           $found_dups++;
        }
     }
  }
}
print "Found $found_dups duplicates\n";
Takk,
Srini
  #2 (permalink)  
Old 04-27-2007
ghostdog74 ghostdog74 is offline Forum Advisor  
Registrert bruker
  
 

Bli Dato: Sep 2006
Innlegg: 2538
Hvis du har Python, her er en ryddigere alternativ:
Code:
#!/usr/bin/python
for line in open("file"):
    line = line.strip().split(",")
    if len(line) == len(set(line)):
        print "No change"
    else:
        print ','.join(line)
utgang:
Code:
# ./test.py
No change
apple,mango,orange,apple,grape
unix,windows,solaris,windows,linux
No change
orange,maroon,pink,violet,orange,pink
  #3 (permalink)  
Old 04-27-2007
awk awk is offline
Registrert bruker
  
 

Bli Date: Feb 2007
Innlegg: 134
awk-F, '(
for (i \u003d 1; I <NF, jeg + +)
(
for (J \u003d I +1; J <\u003d NF; J + +)
(
if ($ i \u003d\u003d $ J) (print $ I ":" $ 0)
)
)
) '<<ENDOFFILE
løve, tiger, bjørn
eple, mango, appelsin, eple, drue
Unix, Windows, Solaris, Windows, Linux
rød, blå, grønn, gul
appelsin, maroon, rosa, fiolett, oransje, rosa
ENDOFFILE
eple: eple, mango, appelsin, eple, drue
vinduer: Unix, Windows, Solaris, Windows, Linux
oransje: appelsin, Maroon, rosa, fiolett, oransje, rosa
rosa: orange, Maroon, rosa, fiolett, oransje, rosa
  #4 (permalink)  
Old 04-27-2007
srinivasan_85 srinivasan_85 is offline
Registrert bruker
  
 

Bli Date: Jan 2007
Innlegg: 28
Unhappy

Hei,
Thanx for forslagene. Jeg forstår at jobben kan gjøres av ulike varianter av skript, men det jeg ivrig om er "en enkelt kommando / kommando pipe" som kan gjøre jobben. Hvis det er bare bestemte antall oppføringer i hver linje, kan jeg manuelt sammenligne dem i kommandolinjen ved hjelp awk /perl. Men siden jeg dont vite det nei. oppføringer i hver linje, er oppgaven uhåndterlige.
Jeg vil bli opplyst hvis jeg får en kommando pipe versjon av disse skriptene.

Takk
Srini
  #5 (permalink)  
Old 04-30-2007
kahuna's Avatar
Kahuna kahuna is offline
Registrert bruker
  
 

Bli Dato: april 2007
Innlegg: 149
Srini, jeg er ikke sikker på at jeg forstår din motvilje mot å bruke skript postet. Når det er sagt, kan du prøve skriptet nedenfor. Det er ikke veldig effektivt, men er kort.
Code:
perl -nle 'print if /(^|,)([^,]+)(,|,.*,)\2(,|$)/;' <file
  #6 (permalink)  
Old 04-30-2007
matrixmadhan matrixmadhan is offline Forum Advisor  
Technorati Master
  
 

Bli Date: Mar 2005
Sted: leaf node i B + treet
Innlegg: 2953
Igjen med perl,
men mye enklere

Code:
#! /opt/third-party/bin/perl

open(FILE, "<", "file") || die "Unable to open file <$!> \n";

while(chomp($var=<FILE>)) {
  @arr = split(/,/, $var);
  foreach(@arr) {
    if( exists $fileHash{$_} ) {
      print $var . "\n";
      last;
    }
    else {
      $fileHash{$_} = $i++;
    }
  }
  %fileHash = ();
}

close(FILE);

exit 0
  #7 (permalink)  
Old 05-01-2007
srinivasan_85 srinivasan_85 is offline
Registrert bruker
  
 

Bli Date: Jan 2007
Innlegg: 28
Wink

Hei,
Jeg tror jeg er feil.
Sitat:
Originally Posted by Kahuna
Srini, jeg er ikke sikker på at jeg forstår din motvilje mot å bruke skript postet.
Jeg hadde et slikt krav når jeg postet dette spørsmålet, men det var min nysgjerrighet som drev meg til å spørre deg guyz om "kommandolinjen" versjon av hva min perl Programmet kunne gjøre. Det er ikke at jeg forsømmer skriptene postet, men bare at jeg ønsket å utvide min kunnskap på ett-liners (Jeg har en fascinasjon overfor en-liners).

Jeg beklager hvis min gjerning var arrogant skjønt.

Takk,
Srini
Closed Thread

Hugseliste

Tags
linux

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 02:46.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0