我有,其内容的文件如下:在awk子犯规产量预期的结果
C2:0301,353458082243570,353458082243580,0;
C2:0301,353458082462440,353458082462450,0;
C2:0301,353458082069130,353458082069140,0;
C2:0301,353458082246230,353458082246240,0;
C2:0301,353458082559320,353458082559330,0;
C2:0301,353458080153530,353458080153540,0;
C2:0301,353458082462670,353458082462680,0;
C2:0301,353458081943950,353458081943960,0;
C2:0301,353458081719070,353458081719080,0;
C2:0301,353458081392470,353458081392490,0;
Field 2 and Field 3
(考虑,
作为分隔符),包含15 digit IMEI number
ranges
和not
个人IMEI numbers
。通常的格式IMEI
是8-digits(TAC)+6-digits(Serial number)+0(padded)
。 IMEI
中的6 digits(Serial number)
部分定义了开始和结束范围,其他部分保持相同。因此,为了找到范围个别IMEIs
(这正是我想要的),我需要从6 digits(Serial number)
从ending IMEI number
in Field-3
一个unary increment loop
从starting IMEI number
in Field-2
直到6 digits(Serial number)
。我使用的是下面AWK
脚本:
awk -F"," '{v = substr($2,9,6); t = substr($3,9,6); while(v <= t) printf "%s%0"6"s%s,%s\n", substr($3,1,8),v++,substr($3,15,2),$4;}' TEMP.OUT.merge_range_part1_21
它给了我下面的结果:
353458082243570,0
353458082243580,0
353458082462440,0
353458082462450,0
353458082069130,0
353458082069140,0
353458082246230,0
353458082246240,0
353458082559320,0
353458082559330,0
353458080153530,0
353458082462670,0
353458082462680,0
353458081943950,0
353458081943960,0
353458081719070,0
353458081719080,0
353458081392470,0
353458081392480,0
353458081392490,0
将如预期除了在result
以下线以上:
353458080153530,0
result
实际上来自input file
的下面一行:
C2:0301,353458080153530,353458080153540,0;
但input file
的expected output
为上述行是:
353458080153530,0
353458080153540,0
我需要知道什么在我的脚本去错了。
不仅你输入的一个案例,也是最后3行:'353458081392470,0 353458081392480,0 353458081392490,0' - 这'353458081392480,0'不应该有 – RomanPerekhrest
@RomanPerekhrest这很好。基本上增量必须发生在substr($ 2,9,6)'上。在这种情况下,'139247'增加到'139249',因此我有'353458081392470,0 353458081392480,0 353458081392490,0',这正是我所期望的。我的问题是我的脚本没有处理我领先零的情况。例如,对于substr($ 2,9,6)上面的问题情况,是'015353'。它应该增加到“015354”,我应该同时拥有“353458080153530,0”和“353458080153540,0”。这没有发生 –
忽略我的答案,因为它不会在while循环的第二次迭代中工作 –