GNU/Linux >> Belajar Linux >  >> Linux

grep untuk mencari data di kolom pertama

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


Jika Anda dapat menggunakan awk , coba ini:

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

Penjelasan:

  • awk membaca setiap baris dan mencocokkan kolom pertama dengan ekspresi reguler (regex)
  • Kolom pertama harus dimulai dengan Abc, diikuti dengan apa saja (nol kali atau lebih), dan diakhiri dengan def
  • Jika kecocokan tersebut ditemukan, tambahkan kolom ke-2 ke variabel SUM
  • Setelah membaca semua baris, cetak variabel

Grep mengekstrak setiap baris yang dimulai dengan Abc, diikuti oleh apa saja, diikuti oleh def, diikuti oleh apa saja, diikuti dengan angka (nol kali atau lebih) hingga akhir. Garis-garis itu diumpankan / disalurkan ke awk. Awk hanya menambah SUM untuk setiap baris yang diterimanya. Setelah membaca semua baris yang diterima, variabel SUM akan dicetak.


Linux
  1. Regex dan grep:Aliran data dan blok penyusun

  2. Pencocokan Pola Multiline Menggunakan Sed, Awk Atau Grep?

  3. Bagaimana Cara Mencari Di File Tertentu yang Sesuai Dengan Pola?

  1. Tangkap Grup Dengan Awk Atau Grep?

  2. Temukan Hanya Kejadian Pertama Menggunakan Only Grep?

  3. Menggunakan grep untuk mencari secara terbalik

  1. Regex (grep) untuk pencarian multi-baris diperlukan

  2. menggunakan awk dengan kondisi nilai kolom

  3. grep untuk istilah dan mengecualikan istilah lain