The UNIX and Linux Forums  
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.

Go Back   UNIX och Linux Forum > Upp Forum > UNIX for Dummies Frågor & Svar
.
google unix.com



UNIX for Dummies Frågor & Svar Om du inte är säker på var att skriva en UNIX eller Linux fråga efter det här. Alla UNIX-och Linux-nybörjare välkomna!

Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
Tråd Thread Starter Forum Svar Senaste Inlägg
räkna antal ord i en linje Satish @ 123 Shell-programmering och Skript 7 05-21-2008 03:59
Måste identifiera raden som innehåller @ i mellan raden i en fil b.paramanatti UNIX for Dummies Frågor & Svar 4 11-04-2007 10:50
skilja ord från en linje? skyineyes Shell-programmering och Skript 3 06-26-2007 10:00
att ta bort linjen och dubbla linje PANTERKATT UNIX for Dummies Frågor & Svar 11 01-30-2007 12:44
Dubblett ord zulander UNIX for Dummies Frågor & 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 denna tråd Rate Thread Visningslägen
  #1 (permalänk)  
Old 04-27-2007
srinivasan_85 srinivasan_85 is offline
Registered User
  
 

Join Date: Jan 2007
Inlägg: 28
Exclamation Identifiera duplikatet ord i en linje med hjälp av kommandot

Hej,
Låt mig förklara problemet tydligt:
Låt poster i min filen:
Kod:
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 upptäcka de linjer där ett av orden (separerade med fält separator) förekommer mer än en gång, med ett kommando (eller kommando pipa)?
I detta fall bör kommandot upptäcka linjerna 2,3,5.

Jag åstadkommit den med en perl script (som nämns nedan), men jag undrar om detta kan ske genom ett kommando (svårigheten är att ingen. kolumner inte är konstant).

Perl program som jag använde:
Kod:
$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";
Tack,
Srini
  #2 (permalänk)  
Old 04-27-2007
ghostdog74 ghostdog74 is offline Forum Advisor  
Registered User
  
 

Join Date: Sep 2006
Inlägg: 2.539
Om du har Python, här är en nättare alternativ:
Kod:
#!/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)
produktion:
Kod:
# ./test.py
No change
apple,mango,orange,apple,grape
unix,windows,solaris,windows,linux
No change
orange,maroon,pink,violet,orange,pink
  #3 (permalänk)  
Old 04-27-2007
awk awk is offline
Registered User
  
 

Join Date: februari 2007
Inlägg: 134
awk-F, '(
for (i \u003d 1; I <NF; I + +)
(
for (j \u003d I +1, J <\u003d NF; J + +)
(
if ($ i \u003d\u003d $ J) (print $ I ":" $ 0)
)
)
) '<<ENDOFFILE
lejon, tiger, björn
äpple, mango, apelsin, äpple, druva
Unix, Windows, Solaris, Windows, Linux
röd, blå, grön, gul
orange, rödbrun, rosa, lila, orange, rosa
ENDOFFILE
Apple: äpple, mango, apelsin, äpple, druva
Windows: Unix, Windows, Solaris, Windows, Linux
orange: orange, rödbrun, rosa, lila, orange, rosa
pink: orange, rödbrun, rosa, lila, orange, rosa
  #4 (permalänk)  
Old 04-27-2007
srinivasan_85 srinivasan_85 is offline
Registered User
  
 

Join Date: Jan 2007
Inlägg: 28
Unhappy

Hej,
Thanx for the suggestions. Jag förstår att jobbet kan göras genom olika varianter av manus, men vad jag är angelägen om är "ett enda kommando / command pipe" som kan göra jobbet. Om det bara finns visst antal poster i varje linje, jag manuellt kan jämföra dem på kommandoraden med awk /perl. Men eftersom jag vet inte det nej. poster i varje rad, är uppgiften tungrott.
Jag skulle bli upplyst om jag får en version kommando pipa av dessa skript.

Tack
Srini
  #5 (permalänk)  
Old 04-30-2007
kahuna's Avatar
kahuna kahuna is offline
Registered User
  
 

Join Date: april 2007
Inlägg: 149
Srini, jag är inte säker på att jag förstår din motvilja mot att använda skript upp. Med detta sagt, kan du prova skriptet nedan. Det är inte särskilt effektiv, men är kort.
Kod:
perl -nle 'print if /(^|,)([^,]+)(,|,.*,)\2(,|$)/;' <file
  #6 (permalänk)  
Old 04-30-2007
matrixmadhan matrixmadhan is offline Forum Advisor  
Technorati Master
  
 

Join Date: mars 2005
Ort: löv i B + träd
Inlägg: 2.954
Igen med perl,
men mycket enklare

Kod:
#! /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 (permalänk)  
Old 05-01-2007
srinivasan_85 srinivasan_85 is offline
Registered User
  
 

Join Date: Jan 2007
Inlägg: 28
Wink

Hej,
Jag tror att jag misstar mig.
Citat:
Ursprungligen postat av kahuna
Srini, jag är inte säker på att jag förstår din motvilja mot att använda skript upp.
Jag hade ett sådant krav när jag postat den här frågan, men det var min nyfikenhet som drev mig att fråga er guyz om "kommandorad" version av vad min perl Programmet kunde göra. Det är inte att jag bortser från manus postat, men bara att jag ville utveckla mina kunskaper på ett-liners (jag har en fascination för en-liners).

Jag är ledsen om min dådet var arrogant though.

Tack,
Srini
Closed Thread

Komihåglista

Taggar
linux

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 07:05.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0