[英]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)匹配第一列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.