Bash: deduplikace souboru bez řazení

fotka

  • ***
  • 216
    • Zobrazit profil
    • Linux forum
    • E-mail
Bash: deduplikace souboru bez řazení
« kdy: 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
« Poslední změna: 06. 07. 2015, 23:32:27 od Petr Krčmář »
Linux nováček - CeskeForum.com


Jenda

Re:Linux bash: Jak deduplikovat soubor bez řazení?
« Odpověď #1 kdy: 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é.

Atrament

Re:Linux bash: Jak deduplikovat soubor bez řazení?
« Odpověď #2 kdy: 06. 07. 2015, 05:07:45 »
Kód: [Vybrat]
grep -vF soubor1 -f soubor2 > soubor3

Tom22

Re:Linux bash: Jak deduplikovat soubor bez řazení?
« Odpověď #3 kdy: 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

aaa158

  • ***
  • 238
    • Zobrazit profil
    • E-mail
Re:Linux bash: Jak deduplikovat soubor bez řazení?
« Odpověď #4 kdy: 07. 07. 2015, 13:03:07 »


Tom22

Re:Linux bash: Jak deduplikovat soubor bez řazení?
« Odpověď #5 kdy: 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á).