我有一个文件:
_
我想使用Cat |来阅读此文件grep awk。 并且希望能够使用这些命令的组合来运行命令,以检查“值”部分中的每个数字是否在每个下一行中增加1。 如果在任何情况下都没有遵循,我希望能够看到这一点。
直到现在:我被困在: $ Cat FileName | awk -F“=”'{print $ 4}'
由于
答案 0 :(得分:1)
Perl解决方案:
perl -ne 'next unless /value = ([0-9]+)/;
print "$.: $_" if 1 + $value != $1;
$value = $1' -- file.name
-n
逐行读取输入行$value
保留上一行的值。如果捕获的值不等于旧的加1,则会打印行号($.
)和行($_
)。答案 1 :(得分:1)
Awk
解决方案:
示例input.txt
:
Time= 12:40:41, value = 1, data=2, data2=4,timeEnter=12:34:34
Time= 12:40:41, value = 2, data=2, data2=4,timeEnter=12:34:34
Time= 12:40:41, value = 3, data=2, data2=4,timeEnter=12:34:34
Time= 12:40:41, value = 5, data=2, data2=4,timeEnter=12:34:34
Time= 12:40:41, value = 6, data=2, data2=4,timeEnter=12:34:34
Time= 12:40:41, value = 7, data=2, data2=4,timeEnter=12:34:34
Time= 12:40:41, value = 9, data=2, data2=4,timeEnter=12:34:34
Time= 12:40:41, value = 10, data=2, data2=4,timeEnter=12:34:34
awk 'v && ($5-1)!=v{ printf "value %d is not followed by %d\n",v,v+1 }{ v=$5+0 }' input.txt
v=$5+0
- 捕获当前值(作为数字)v && ($5-1)!=v
- 如果当前值号码$5
不是 next (增加 1 )相对于前一个v
(等效条件为v && $5+0!=v+1
)输出:
value 3 is not followed by 4
value 7 is not followed by 8
答案 2 :(得分:1)
考虑输入文件so.txt
具有以下内容:
Time= 12:40:41, value = 1, data=2, data2=4,timeEnter=12:34:34
Time= 12:40:41, value = 2, data=2, data2=4,timeEnter=12:34:34
Time= 12:40:41, value = 3, data=2, data2=4,timeEnter=12:34:34
Time= 12:40:41, value = 4, data=2, data2=4,timeEnter=12:34:34
Time= 12:40:41, value = 7, data=2, data2=4,timeEnter=12:34:34
Time= 12:40:41, value = 8, data=2, data2=4,timeEnter=12:34:34
Time= 12:40:41, value = 9, data=2, data2=4,timeEnter=12:34:34
Time= 12:40:41, value = 10, data=2, data2=4,timeEnter=12:34:34
这是一个可能的解决方案:
cat so.txt | awk {'print $5'} | tr -d , | awk '$1!=p+1{print "values from "p+1" to "$1-1" are missing"}{p=$1}'
这将输出:
values from 5 to 6 are missing
如果值字段中没有间隙,则该命令不会输出任何内容。
这是如何运作的?
该命令可以打破为:
cat so.txt
将在stdout上输出文件内容awk {'print $5'}
将打印第5列(值字段),tr -d ,
删除逗号分隔符最终的awk表达式有:
$1
是当前输入行的第一列p
是最后一行的前一个值($1!=p+1)
是一个条件:如果$1
与之前的值+1不同,那么:{print "values from "p+1" to "$1-1" are missing"}
:打印上一个值+1,第一列+1缺失{p=$1}
:p
已分配给当前第1列。答案 3 :(得分:0)
您可以使用此function [y] = blah(x)
y = (x^3) - x + 8;
end
:
fplot('blah', [0 100])
<强>输入:强>
awk
<强>输出:强>
awk -F '[ ,]' 'NR==1{p=$6;next} $6!=p+1{print "Mismatched line no:"NR} {p=$6}' file