![]() |
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.
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
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 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";
Srini |
|
||||
|
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)
Kod:
# ./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; 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 |
|
||||
|
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 |
|
||||
|
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
|
|
||||
|
Hej,
Jag tror att jag misstar mig. Citat:
Jag är ledsen om min dådet var arrogant though. Tack, Srini |
![]() |
| Komihåglista |
| Taggar |
| linux |
| Thread Tools | Sök i denna tråd |
| Visningslägen | Betygsätt denna tråd |
|
|