grep to search data in first column

Use awk. cat myfile | awk '{print $1}' | grep query


If you can use awk, try this:

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

Explanation:

  • awk reads each line and matches the first column with a regular expression (regex)
  • The first column has to start with Abc, followed by anything (zero or more times), and ends with def
  • If such match is found, add 2nd column to SUM variable
  • After reading all lines print the variable

Grep extracts each line that starts with Abc, followed by anything, followed by def, followed by anything, followed by a number (zero or more times) to end. Those lines are fed/piped to awk. Awk just increments SUM for each line it receives. After reading all lines received, it prints the SUM variable.

Tags:

Linux

Ubuntu

Grep