GNU/Linux >> Znalost Linux >  >> Linux

Hledání obsahu jednoho souboru v jiném souboru

grep sám je toho schopen. Jednoduše použijte příznak -f :

grep -f <patterns> <file>

<patterns> je soubor obsahující jeden vzor v každém řádku; a <file> je soubor, ve kterém chcete hledat věci.

Všimněte si, že pro vynucení grep abyste každý řádek považovali za vzor, ​​i když obsah každého řádku vypadá jako regulární výraz, měli byste použít příznak -F, --fixed-strings .

grep -F -f <patterns> <file>

Pokud je váš soubor CSV, jak jste řekli, můžete:

grep -f <(tr ',' '\n' < data.csv) <file>

Jako příklad zvažte soubor "a.txt" s následujícími řádky:

alpha
0891234
beta

Nyní soubor "b.txt" s řádky:

Alpha
0808080
0891234
bEtA

Výstup následujícího příkazu je:

grep -f "a.txt" "b.txt"
0891234

Vůbec nepotřebujete for -smyčka zde; grep sám tuto funkci nabízí.

Nyní pomocí názvů souborů:

#!/bin/bash
patterns="/home/nimish/contents.txt"
search="/home/nimish/another_file.csv"
grep -f <(tr ',' '\n' < "${patterns}") "${search}"

Můžete změnit ',' na oddělovač, který máte ve svém souboru.


Jiné řešení:

  • použijte awk a vytvořte si vlastní hash (např. ahash), vše ovládáte sami.
  • nahraďte $0 to $i a můžete přiřadit jakákoli pole, která chcete.
awk -F"," '
{  
   if (nowfile==""){ nowfile = FILENAME;  }

   if(FILENAME == nowfile)
   {
     hash[$0]=$0;
   }
   else
   {
       if($0 ~ hash[$0])
       {  
           print $0
       }
   }
} '  xx yy

Linux
  1. Vyhledání obsahu blokové a souborové aplikace OCP v ODF:Vytvoření projektu

  2. Kopírovat posledních N řádků z jednoho souboru do druhého?

  3. Výstupní obsah souboru, když se mění?

  1. Existuje jedna vložka ke kontrole souboru?

  2. Rsync dva typy souborů v jednom příkazu?

  3. Shell - Zápis proměnného obsahu do souboru

  1. Jak kopírovat nebo klonovat oprávnění z jednoho souboru do druhého v systému Linux

  2. Nástroj pro získání řádků v jednom souboru, které nejsou v jiném?

  3. Zkopírujte velký soubor z jednoho linuxového serveru na druhý