【发布时间】:2017-11-28 03:07:49
【问题描述】:
我有一个名为“test.txt”的文本文件,其中包含多行,字段用分号分隔。我正在尝试获取 field3 的值 > 去掉除字段中的数字之外的所有内容 > 将其与上一行中字段 3 的值进行比较 > 如果该值是唯一的,则重定向字段 3 的值及其之间的差异和最后一个值到一个名为“differences.txt”的文件中。
到目前为止,我有以下代码:
awk -F';' '
BEGIN{d=0} {gsub(/^.*=/,"",$3);
if(d>0 && $3-d>0){print $3,$3-d} d=$3}
' test.txt > differences.txt
当我尝试在以下文本中运行时,这绝对可以正常工作:
field1=xxx;field2=xxx;field3=111222222;field4=xxx;field5=xxx
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=111222555;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
按预期输出:
111222333 111
111222444 111
111222555 111
111222777 222
111222888 111
但是,当我尝试在其中运行以下文本时,我得到完全不同的意外数字 - 我不确定这是由于字段长度增加还是其他原因??
测试:
test=none;test=20170606;test=1111111111111111111;
test=none;test=20170606;test=2222222222222222222;
test=none;test=20170606;test=3333333333333333333;
test=none;test=20170606;test=4444444444444444444;
test=none;test=20170606;test=5555555555555555555;
test=none;test=20170606;test=5555555555555555555;
test=none;test=20170606;test=6666666666666666666;
test=none;test=20170606;test=7777777777777777777;
test=none;test=20170606;test=8888888888888888888;
test=none;test=20170606;test=9999999999999999999;
test=none;test=20170606;test=100000000000000000000;
test=none;test=20170606;test=11111111111111111111;
输出,具有意外值:
2222222222222222222 1111111111111111168
3333333333333333333 1111111111111111168
4444444444444444444 1111111111111111168
5555555555555555555 1111111111111110656
6666666666666666666 1111111111111111680
7777777777777777777 1111111111111110656
8888888888888888888 1111111111111111680
9999999999999999999 1111111111111110656
100000000000000000000 90000000000000000000
任何人都可以看到我哪里出错了,因为我显然遗漏了一些东西......这让我精神崩溃!
非常感谢! :)
【问题讨论】: