簡體   English   中英

grep 在第一列中搜索數據

[英]grep to search data in first column

我有一個包含兩列的文本文件。

Product   Cost
Abc....def  10
Abc.def     20
ajsk,,lll   04

我想搜索從“Abc”開始並以“def”結尾的產品,然后對於那些我想添加成本的條目。 我用過了 :

grep "^Abc|def$" myfile 

但它不起作用

使用awk。 cat myfile | awk '{print $1}' | grep query

如果你可以使用awk ,試試這個:

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

解釋:

  • awk讀取每一行並用正則表達式(regex)匹配第一列
  • 第一列必須以 Abc 開頭,后跟任何內容(零次或多次),並以 def 結尾
  • 如果找到這樣的匹配,將第二列添加到 SUM 變量
  • 閱讀所有行后打印變量

Grep 提取以 Abc 開頭的每一行,然后是任何內容,然后是 def,然后是任何內容,然后是一個數字(零次或多次)以結束。 這些行被饋送到/管道到 awk。 awk 只是為它收到的每一行增加 SUM。 讀取收到的所有行后,它會打印 SUM 變量。

謝謝編輯。 你想要這樣的命令嗎?

grep "^Abc.*def *.*$"

如果您不想使用 cat,並且還顯示行號:

awk '{print $1}' filename | grep -n keyword

如果適用,您可以考慮插入符號 ^: grep -E '^onething|^otherthing'它將匹配字符串開頭的文本,該字符串始終是第一列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM