Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: fotka 06. 07. 2015, 01:16:54

Název: Bash: deduplikace souboru bez řazení
Přispěvatel: fotka 06. 07. 2015, 01:16:54
Dobrý den,

prosím poradíte způsob jak toto provést?

soubor1
soubor2

potřebuji odstranit ze souboru1 linky, které již existují v souboru2

potřebuji zachovat původní řazení linek, tedy aby nebylo při deduplikaci použito žádné řazení (aby se nepřeházely linky)
je jedno jestli z toho bude soubor3 ale musí z toho být soubor, ve kterém nebudou linky ze soubor2 a nebude pozměněna posloupnost linek, nebo jak to říci.

děkuji
Název: Re:Linux bash: Jak deduplikovat soubor bez řazení?
Přispěvatel: Jenda 06. 07. 2015, 01:26:38
Já bych to dělal v pythonu pomocí jeho set - přidal bych si tam všechny linky ze souboru2 a pak kontroloval. set je implementována jako hashtable, takže vyhledání je velmi rychlé.
Název: Re:Linux bash: Jak deduplikovat soubor bez řazení?
Přispěvatel: Atrament 06. 07. 2015, 05:07:45
Kód: [Vybrat]
grep -vF soubor1 -f soubor2 > soubor3
Název: Re:Linux bash: Jak deduplikovat soubor bez řazení?
Přispěvatel: Tom22 06. 07. 2015, 23:06:34
Kód: [Vybrat]
grep -vF soubor1 -f soubor2 > soubor3

To je pěkné! - dávám bod,
a ještě bych tam přidal -x
Kód: [Vybrat]
cat soubor1 | grep -vFxf soubor2 > soubor3
Název: Re:Linux bash: Jak deduplikovat soubor bez řazení?
Přispěvatel: aaa158 07. 07. 2015, 13:03:07
Kód: [Vybrat]
cat soubor1 | grep -vFxf soubor2 > soubor3

http://www.smallo.ruhr.de/award.html#cat

 :(
Název: Re:Linux bash: Jak deduplikovat soubor bez řazení?
Přispěvatel: Tom22 08. 07. 2015, 00:22:03
Kód: [Vybrat]
cat soubor1 | grep -vFxf soubor2 > soubor3

http://www.smallo.ruhr.de/award.html#cat

 :(

:)
ale nemohu zcela souhlasit - "cat" jsem použil záměrně pro zvýraznění faktu, že ta konstrukce jde pěkně použít jako "filter".

Forma, kde je datový soubor specifikován jako parametr, nebo forma s přesměrováním vstupu mi nepřipadala dostatečně názorná (sám jsem se v citované formě trochu ztrácel při identifikaci, co je argument switche a co datový soubor - než jsem si všiml, že switch -F argument nemá).