Portál AbcLinuxu, 10. května 2025 09:53

Dotaz: opak prikazu uniq

4.11.2009 10:12 chinook | skóre: 28
opak prikazu uniq
Přečteno: 570×
Odpovědět | Admin
kdyz zadam prikaz uniq vypise mne pouze radky jednou i kdyz tam jsou vicekrat. priklad: mam seznam md5sum

07a5b83a20f5d4002fff208e8180eba1
07a5b83a20f5d4002fff208e8180eba1
07a5b83a20f5d4002fff208e8180eba1
07a5b83a20f5d4002fff208e8180eba1
7555bf7259c046c651fa4253059ca4a7
8b8a8b353298f798e3eb8628661617b6
8b8a8b353298f798e3eb8628661617b6
8b8a8b353298f798e3eb8628661617b6
8ead78f99561b4c8e2757e588ff8891a
uniq vypise:

07a5b83a20f5d4002fff208e8180eba1
7555bf7259c046c651fa4253059ca4a7
8b8a8b353298f798e3eb8628661617b6
8ead78f99561b4c8e2757e588ff8891a

A ja potrebuju vypsat vse krome toho co vypsal

07a5b83a20f5d4002fff208e8180eba1
07a5b83a20f5d4002fff208e8180eba1
07a5b83a20f5d4002fff208e8180eba1
8b8a8b353298f798e3eb8628661617b6
8b8a8b353298f798e3eb8628661617b6
8b8a8b353298f798e3eb8628661617b6
tzn pokud se tam opakuje neco 4x, tak aby to vypsal jen 3x. Za tema md5sum jsou pak cesty k souborum, ktere budu pak potrebovat smazat, aby nebyly na disku 2x, ale jen pouze 1x

Jak vyresit tento problem?

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (chinook (tazatel))
4.11.2009 10:18 ams
Rozbalit Rozbalit vše Re: opak prikazu uniq
Odpovědět | | Sbalit | Link | Blokovat | Admin
perl -ne '$_{$_}++&&print' soubor_se_seznamem_md5sum
4.11.2009 11:25 NeoV | skóre: 23
Rozbalit Rozbalit vše Re: opak prikazu uniq
presne tak... kratke a rychle :-)

v pripade, ze chces subory rovno mazat, mozes to spravit napr takto:

perl -ne '$_{$_}++&&/(\S+)\s+(.*)/&&print("rm $2\n")&&`rm $2`' soubor_se_seznamem_md5sum
4.11.2009 11:52 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: opak prikazu uniq
`rm $2`
unlink $2
In Ada the typical infinite loop would normally be terminated by detonation.
4.11.2009 13:10 NeoV | skóre: 23
Rozbalit Rozbalit vše Re: opak prikazu uniq
jasneee :-D vacsinou na prvy krat to nie je to co by malo byt :-)

perl -ne '$_{$_}++&&/\S+\s+(.*)/&&print("rm $1\n")&&unlink($1)' SUBOR

...takto je to uz lepsie :-)
Řešení 1× (chinook (tazatel))
4.11.2009 13:19 NeoV | skóre: 23
Rozbalit Rozbalit vše Re: opak prikazu uniq
no musim sa priznat, ze aj druhy pohlad klamal... a cele je to zle :-\

pretoze porovnavat sa musi iba md5 hodnota !!! nie cely riadok (subor resp cesta sa moze/ma lisit !!!

takze tu je spravny cmd, abe chyb :-) :

perl -ne '/(\S+)\s+(.*)/&&$h{$1}++&&print("rm $2\n")&&unlink($2)' SUBOR

Suma sumarum -> prvy vyskey MD5 hodnoty je ignorovany... ostatne vyskyty su odchytene a subory vymazane... :-)
4.11.2009 13:29 chinook | skóre: 28
Rozbalit Rozbalit vše Re: opak prikazu uniq
V pohode uz to neres. Stacilo me navest. Spis jsem cekal, ze bude nejaka funkce jako uniq.
Řešení 1× (chinook (tazatel))
4.11.2009 11:11 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: opak prikazu uniq
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/bin/bash

sum0='x'
name0='x'
nt=0
nr=0

while read sum name; do
  : $[nt++]
  if [ $sum = $sum0 ]; then
    echo "'$name' = '$name0'"
    rm "$name"
    : $[nr++]
  else
    sum0="$sum"
    name0="$name"
  fi
done

echo "total: $nt"
echo "removed: $nr"
4.11.2009 13:32 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: opak prikazu uniq
Z toho skriptu by to asi mělo být jasné, ale jen pro jistotu: výstup sha1sum je samozřejmě potřeba nejdřív prohnat sortem.
4.11.2009 13:43 cronin | skóre: 49
Rozbalit Rozbalit vše Re: opak prikazu uniq
Co plati aj pre uniq, ktory odstrani duplicity sam o sebe iba ak su "dostatocne blizko". No a v tom pripade je uz lepsie pouzit rovno sort -u.
4.11.2009 14:19 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: opak prikazu uniq
Odpovědět | | Sbalit | Link | Blokovat | Admin
md5sum * | sort | uniq -w 32 -d
If you hold a Unix shell up to your ear, you can you hear the C.
4.11.2009 15:09 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: opak prikazu uniq
No, to by ti vypisalo iba opakujuce sa sumy a ich pocty, ale prisiel by si o cesty. Takze aj s cestami podobne ako minule, ale sed-om vyhodit sumy, ktore sa lisia od sumy na predchadzajucom riadku:
md5sum * | sort | sed -rn 'x;G; s/([^ ]*)  (.*)\n\1  //p'
(Vstup sedu je zotriedeny zoznam sum. Sed si odlozi aktualny riadok do hold-space a pozrie, ci sa retazec zlepeny z predosleho a aktualneho riadku (oddeleny \n) obsahuje "suma1 cesta1\nsuma1 ". Ak ano, tak akt. riadok ma rovnaku sumu ako predosly, vypise iba cestu aktualneho riadku a ide na dalsi riadok. Ak neobsahuje, tak rovno ide na dalsi riadok.)

Nastroj, ktory robi presne opak uniqu (bez logiky so sumami a cestami) sa da spravit 2 sposobmi, ktore sa lisia len cesto, ako zo zlepeneho retazca zase vyrobit jeho druhy komponent:
sed -rn 'x; G; s/^(.*)\n\1$/\1/p'
sed -rn 'x; G; /^(.*)\n\1$/{g;p}'
If you hold a Unix shell up to your ear, you can you hear the C.
4.11.2009 17:14 NN
Rozbalit Rozbalit vše Re: opak prikazu uniq
Jenom technicka k dotazu jak poznam ktera hash ze 4 stejnych je ta ktera ma zustat?:
07a5b83a20f5d4002fff208e8180eba1 cesta1
07a5b83a20f5d4002fff208e8180eba1 cesta2
07a5b83a20f5d4002fff208e8180eba1 cesta3
07a5b83a20f5d4002fff208e8180eba1 cesta4
Rspektive ktera cesta je ta "prava" 1, 2,3 nebo 4?

Neni pozadavek nesmysl?

NN
4.11.2009 17:19 chinook | skóre: 28
Rozbalit Rozbalit vše Re: opak prikazu uniq
Potreboval jsem promazat v jedne schrance duplicitni emaily, takze pro muj ucel to staci. V jedne schrance se namnozil email asi 50x....
4.11.2009 17:19 ms
Rozbalit Rozbalit vše Re: opak prikazu uniq
Odpovědět | | Sbalit | Link | Blokovat | Admin
A co tak
grep -v `uniq zoznam.txt` zoznam.txt
?
4.11.2009 19:32 triak
Rozbalit Rozbalit vše Re: opak prikazu uniq
to je strasne neefektivni, pouzij radeji

sort | uniq -c | sed 's/ */ /g' | grep -v "^ 1 "

(seřadíš, spočítáš výskyty jednotlivých řádek, odstraníš zbytečné mezery, a vynecháš řádky, co mají výskyt 1)
4.11.2009 19:50 chinook | skóre: 28
Rozbalit Rozbalit vše Re: opak prikazu uniq
pokud tam neco bude 4x tak to zmizi uplne a nezustane jen jednou nebo ne?
4.11.2009 20:23 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: opak prikazu uniq
Ked uz tak,
sort | uniq -c -w32 | grep -v "^ *1 "
ale neriesi to problem, ze sice budes vediet, ktore sumy mas mazat, ale stratis cesty k suborom (pretoze uniq necha iba jeden z nich).
If you hold a Unix shell up to your ear, you can you hear the C.
4.11.2009 21:12 chinook | skóre: 28
Rozbalit Rozbalit vše Re: opak prikazu uniq
cesty k souborum neztratis ty ti zustanou, pokud si je vytahnes: napr.

sort | uniq -c -w 32 | grep -v '^ *1' | awk '{print $3}'
spis je problem, ze to smaze pouze 1 soubor ze 4 vyskytu toho stejneho, takze ti tam dal zustane 3x.
4.11.2009 21:58 Ash | skóre: 53
Rozbalit Rozbalit vše Re: opak prikazu uniq
spis je problem, ze to smaze pouze 1 soubor ze 4

= stratis (omg, to je od stratum či co:D) cesty k souborum

Tudy cesta prostě nevede.
4.11.2009 22:00 Ash | skóre: 53
Rozbalit Rozbalit vše Re: opak prikazu uniq
Přehlédl jsem slovenštinu, pardon :)
4.11.2009 22:52 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: opak prikazu uniq
je problem, ze to smaze pouze 1 soubor ze 4 vyskytu toho stejneho

Co je to, co som nazval stratou ciest ku suborom, ktore treba zmazat. Takze to nie je dobry postup.
If you hold a Unix shell up to your ear, you can you hear the C.
4.11.2009 23:00 vencas | skóre: 32
Rozbalit Rozbalit vše Re: opak prikazu uniq
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/usr/bin/python
import sys,os
seen=set()
for l in sys.stdin:
	md5,name=l[:-1].split()
	if md5 in seen: os.remove(name)
	seen.add(md5)
a seznam souborů poslat rourou

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.