我想知道是否有人可以给我一些关于我正在尝试的任务 - 我有点新手! :(
我有一个名为“stream.txt”的文本文件,其中有多个以分号分隔的字段,格式为:
field1=xxx;field2=xxx;field3=111222222;field4=xxx;field5=xxx
field1=xxx;field2=xxx;field3=111222333;field4=xxx;field5=xxx
field1=xxx;field2=xxx;field3=111222444;field4=xxx;field5=xxx
field1=xxx;field2=xxx;field3=111222444;field4=xxx;field5=xxx
field1=xxx;field2=xxx;field3=111222555;field4=xxx;field5=xxx
field1=xxx;field2=xxx;field3=111222777;field4=xxx;field5=xxx
field1=xxx;field2=xxx;field3=111222888;field4=xxx;field5=xxx
我要做的是使用awk / sed / grep搜索field3的唯一值,并将它们重定向到另一个名为“differences.txt”的文件,其中field3值和之前的值之间的值不同。在上面的例子中,我正在寻找以下输出:
111222333 111
111222444 111
111222555 111
111222777 222
111222888 111
我可以搜索field3的值并重定向它们,但我发现它可以获得值和前一个值之间的差异以显示它旁边。有人有任何提示吗?
非常感谢提前!
答案 0 :(得分:0)
awk 解决方案:
awk -F'[;=]' '!($6 in keys){ a[++c]=$6; keys[$6] }
END{ delete keys; for(i=1;i<=NF;i++) if(a[i+1]) print a[i+1],a[i+1]-a[i] }' file > differences.txt
结果:
> cat differences.txt
111222444 111
111222555 111
111222777 222
111222888 111
答案 1 :(得分:0)
$ awk -F';' '
BEGIN{a=0} {gsub(/^.*=/,"",$3);
if(a>0 && $3-a>0){print $3,$3-a} a=$3}
' stream.txt > differences.txt
$ cat differences.txt
111222333 111
111222444 111
111222555 111
111222777 222
111222888 111
简要说明,
gsub(/^.*=/,"",$3
:提取$3
a
:是存储差异if(a>0 && $3-a>0){print $3,$3-a}
:如果差异大于0 答案 2 :(得分:0)
您只需要:
$ awk -F'[=;]' 'NR>1 && $6!=p{print $6, $6-p} {p=$6}' file
111222333 111
111222444 111
111222555 111
111222777 222
111222888 111