GNU/Linux >> Znalost Linux >  >> Linux

grep pro vyhledávání dat v prvním sloupci

Použijte awk. cat myfile | awk '{print $1}' | grep query


Pokud můžete použít awk , zkuste toto:

text.txt
--------
Product   Cost
Abc....def  10
Abc.def     20
ajsk,,lll   04

With only awk:
awk '$1 ~ /^Abc.*def$/ { SUM += $2 } END { print SUM } ' test.txt
Result: 30

With grep and awk:
grep "^Abc.*def.*\d*$" test.txt | awk '{SUM += $2} END {print SUM}'
Result: 30

Vysvětlení:

  • awk přečte každý řádek a porovná první sloupec s regulárním výrazem (regulární výraz)
  • První sloupec musí začínat na Abc, za ním následuje cokoliv (nula nebo vícekrát) a končí na def
  • Pokud je taková shoda nalezena, přidejte 2. sloupec do proměnné SUM
  • Po přečtení všech řádků vytiskněte proměnnou

Grep extrahuje každý řádek, který začíná Abc, následuje cokoli, následuje def, následuje cokoli, za kterým následuje číslo (nula nebo vícekrát) na konec. Tyto linky jsou napájeny/potrubí do awk. Awk pouze zvýší SUM pro každý řádek, který obdrží. Po přečtení všech přijatých řádků vytiskne proměnnou SUM.


Linux
  1. Jak vyhledávat v konkrétních souborech odpovídajících vzoru?

  2. Najít pouze první výskyt pouze pomocí Grepu?

  3. Použití grep pro vyhledávání obráceně

  1. Regex a grep:Datový tok a stavební bloky

  2. Je potřeba regulární výraz (grep) pro víceřádkové vyhledávání

  3. Použití grep vs awk

  1. Shoda víceřádkového vzoru pomocí Sed, Awk nebo Grep?

  2. Zachyťte skupiny pomocí Awk nebo Grep?

  3. Jak vytisknout třetí sloupec do posledního sloupce?