![]() |
Hei og Velkommen fra USA til UNIX og Linux Forums! Takk for besøket og Delta i vårt globale samfunn.
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Rules | Lenker | Album | FAQ | Medlemsliste | Kalender | Søke | Dagens innlegg | Marker forumene som lest |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Søk i denne tråden | Rate Thread | Visningsmoduser |
|
|
|
||||
|
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 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";
Srini |
|
||||
|
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)
Code:
# ./test.py No change apple,mango,orange,apple,grape unix,windows,solaris,windows,linux No change orange,maroon,pink,violet,orange,pink |
|
||||
|
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 |
|
||||
|
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 |
|
||||
|
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
|
|
||||
|
Hei,
Jeg tror jeg er feil. Sitat:
Jeg beklager hvis min gjerning var arrogant skjønt. Takk, Srini |
![]() |
| Hugseliste |
| Tags |
| linux |
| Thread Tools | Søk i denne tråden |
| Visningsmoduser | Ranger denne tråden |
|
|