-1

在 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 行)来获取第一个匹配值不匹配,所以它无法通过指定行号找到数据,即找到第3行最后一个整数减去第2行最后一个整数,因为不匹配可能首先出现如下:

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

2 回答 2

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
于 2013-03-29T07:18:18.223 回答
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
于 2013-03-30T15:58:23.590 回答