Linux grep搜索第一列中的数据

Linux grep搜索第一列中的数据,linux,ubuntu,grep,Linux,Ubuntu,Grep,我有一个有两列的文本文件 Product Cost Abc....def 10 Abc.def 20 ajsk,,lll 04 我想搜索产品,从“Abc”开始,以“def”结束,然后搜索我想添加成本的条目。 我使用了: grep "^Abc|def$" myfile 但它不起作用请使用awkcat myfile | awk'{print$1}'| grep query谢谢编辑。你想要这样的命令吗 grep "^Abc.*def *.*$" 如果可以使用awk,请尝试以下

我有一个有两列的文本文件

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

谢谢编辑。你想要这样的命令吗

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

如果可以使用
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开头的每一行,后跟anything,后跟def,后跟anything,后跟一个数字(零次或多次)结束。这些管线通过管道输送至awk。Awk只是增加它接收到的每一行的总和。读取收到的所有行后,它将打印SUM变量。

如果不想使用cat,还将显示行号:

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

你需要这样的代码吗
grep“^Abc.*efg$”
我正在搜索的数据在第一列,但是rowHum中有两列,您能否编辑您的问题并添加您的文件示例?如果您发现其中一个答案合适,请将其标记为已接受的答案,以结束您的问题?谢谢,@Aquarius24在一列上看到这个grep'ing的答案:
awk'$1~/^Abc.*def/{print$2}'
这也将删除第二列。