通过在unix环境中查找关键字来获取变量值

时间:2013-03-29 07:10:02

标签: bash shell unix

在UNIX环境中,我有一个包含以下详细信息的file.txt:

Data recording started:
0001100 Matched at 412090
0001101 Mismatched at 414798
0001102 Matched at 420007
0001103 Mismatched at 420015
Job completed

如何通过搜索“匹配”(第2行)字以及第一个“不匹配”(第3行)来获取第一个匹配值 找出它们之间的区别并存储为变量“dif” 结果是匹配减去不匹配,因此它无法通过指定行号找到数据,即查找第3行最后一个整数减去第2行最后一个整数,因为不匹配可能首先出现如下:

Data recording started:
0001100 Mismatched at 412090
0001101 Matched at 414798
0001102 Mismatched at 420007
0001103 Matched at 420015
Job completed

2 个答案:

答案 0 :(得分:0)

一种方式:

echo $(( 
      $(grep Matched input | head -1 | sed 's/.*at //') 
    - $(grep Mismatched input | head -1 | sed 's/.*at //') 
))

或仅使用sed:

echo $(( 
      $(sed -n 's/.*Matched.*at //p' input | head -1) 
    - $(sed -n 's/.*Mismatched.*at //p' input | head -1) 
))

<强>输出

-2708

答案 1 :(得分:0)

我们可以使用grep -m 1来开头。

dif=$(( 
      $(grep -m 1 'Matched' a.txt | sed 's/.*at \([0-9]*\).*/\1/')
    - $(grep -m 1 'Mismatched' a.txt | sed 's/.*at \([0-9]*\).*/\1/')
))
echo $dif