我有以下文件(test.txt),我想改变逻辑如下:
0 becomes 1
1 becomes 2
2 becomes 3
3 becomes 4
4 becomes 5
5 becomes 6
6 becomes 7
7 becomes 8
8 becomes 9
9 becomes 0
$ cat test.txt
69|1074330570|1,sip:+121345633210x3Bverstat=TN-Validation-Passed|tel:+12134565534|0
69|1077822111|2,;tel:+12223120011~sip:[email protected];|sip:[email protected]|0
字符串
我想更改最后4位数,但当x与0x相邻时,0不计数。例如:在第一行'+121345633210x'中,最后4个是3321。在第二行'+12223120011'中,最后4个是0011和'+12223120051',最后4个是0051输出应该如下所示:
69|1074330570|1,sip:+121345644320x3Bverstat=TN-Validation-Passed|tel:+12134566645|0
69|1077822111|2,;tel:+12223121122~sip:[email protected];|sip:[email protected]|0
型
它需要排除'+1',然后计算'10'位数,其中我想替换第三和第四列中的最后4位。
121345633210 becomes 121345644320 / 12134565534 becomes 12134566645
12223120011 becomes 12223121122 / 12223120051 becomes 12223121162 / 13123120022 becomes 13123121133
型
当列只是一个数字时,我使用了下面的逻辑。但在这种情况下,它有其他的东西,所以下面的逻辑不起作用,但通过添加1位数来转换数字是正确的。
awk -F"|" -v OFS="|" '
NR>0 {
for (i=3;i<=4;i++) {
str = substr($i, 1, length($i) - 4)
for (j = length($i) - 3; j <= length($i); j++) {
str = str (substr($i, j, 1) + 1) % 10
}
$i = str
}
}
1'
型
3条答案
按热度按时间yrefmtwq1#
假设:
+
只显示在第3/第4字段,然后只在前面的电话号码一种
awk
方法:字符串
这将产生:
型
cl25kdpy2#
使用
gnu-awk
,你可以这样做:字符串
sauutmhj3#
使用GNU awk for the 3rd arg to match():
字符串
这会产生预期的输出,而不需要测试第3个或第4个字段,也不需要测试
0x
,因为除了3或4之外,没有匹配目标regexp的字段中的字符串,尽管您说过忽略0
后跟x
,实际上,你只是一直在改变前11位数字,任何0
后面跟着x
就是第12位数字。你可以使用任何POSIX awk来做同样的事情:
型