GNU/Linux >> Znalost Linux >  >> Linux

Společné řádky mezi dvěma soubory?

Tato otázka zde již obsahuje odpovědi :Výstup společných řádků (podobností) dvou textových souborů (opak diff)?

(5 odpovědí)
Uzavřeno před 3 lety.

Mám následující kód, který spouštím na svém terminálu.

LC_ALL=C && grep -F -f  genename2.txt hg38.hgnc.bed > hg38.hgnc.goi.bed

To mi nedává společné řádky mezi těmito dvěma soubory. Co mi tam chybí?

Přijatá odpověď:

Použijte comm -12 file1 file2 získat společné řádky v obou souborech.

Možná budete také potřebovat, aby byl váš soubor seřazen do comm fungovat podle očekávání.

comm -12 <(sort file1) <(sort file2)

Z man comm :

-1     suppress column 1 (lines unique to FILE1)
-2     suppress column 2 (lines unique to FILE2)

Nebo pomocí grep musíte přidat -x možnost sladit celý řádek jako odpovídající vzor. F volba říká grep které odpovídají vzoru jako řetězci, nikoli regulárnímu výrazu.

grep -Fxf file1 file2

Nebo pomocí awk .

awk 'NR==FNR{seen[$0]=1; next} seen[$0]' file1 file2

Toto je čtení celého řádku souboru1 do pole nazvaného seen s klíčem jako celý řádek (v awk $0 představují celý aktuální řádek).

Použili jsme NR==FNR jako podmínka pro spuštění následujícího bloku pouze pro první vstup fle1 ne soubor2 , protože NR v awk viz aktuální číslo linky zpracování a FNR odkazuje na aktuální číslo řádku ve všech vstupy. takže NR je jedinečný pro každý vstupní soubor, ale FNR je jedinečný pro všechny vstupy.

next je tam vyprávění awk nepokračujte v klidovém kódu a začněte znovu, dokud NR wan se nerovná FNR to znamená všechny řádky souboru1 přečteno pomocí awk .

Potom další seen[$0] poběží pouze pro druhý soubor2 a pro každý řádek v souboru2 podívá se do pole a vypíše tento řádek tam, kde v poli existuje.

Další jednoduchou možností je použití sort a uniq :

sort file1 file2|uniq -d

Tím se vytisknou oba soubory seřazené poté uniq -d vytiskne pouze duplicitní řádky. ALE toto je uděleno, když v obou samotných souborech NEJSOU ŽÁDNÉ duplicitní řádky, jinak níže uvedené je vždy uděleno, i když jsou v obou souborech duplicitní řádky.

uniq -d <(sort <(sort -u file1) <(sort -u file2))

Linux
  1. Tisknout čáry mezi (a vyjma) dvěma vzory?

  2. Tisknout čáry mezi (a včetně) dvěma vzory?

  3. Tisknout dva soubory ve dvou sloupcích?

  1. Porovnat dva sloupce různých souborů a vytisknout, pokud se shodují?

  2. Linux – Jak smazat soubory vytvořené mezi dvěma časy?

  3. Extrahovat text mezi dva konkrétní řádky?

  1. Jak Rsync souborů mezi dvěma dálkovými ovladači?

  2. Lum – nahradit běžné hodnoty ve dvou souborech podle prvního sloupce?

  3. Kartézský součin dvou souborů (jako sady řádků) v GNU/Linux