如果前一行是IP,我需要一个bash / sed / grep / awk命令来添加新行和零值。像这样:
INPUT:
1.0.0.6
1.0.130.99
44
1.0.210.94
43
1.0.212.145
43
1.0.254.4
1.1.1.1
1.1.1.138
输出:
1.0.0.6
0
1.0.130.99
44
1.0.210.94
43
1.0.212.145
43
1.0.254.4
0
1.1.1.1
0
1.1.1.138
0
答案 0 :(得分:0)
在IP
之后打印0
首先使用regex匹配ip,如下所示:
/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/
正则表达式是自解释的,例如可以使用awk来识别ip。在以下awk
单行中,我们将检查作为IP地址的行,并在满足条件时打印0
。
awk --re-interval '{print} /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/ { print 0 }' file
其中file是当前目录中的输入文件。这应该产生所需的输出。
在IP之间打印0
awk --re-interval '{
if ($0 ~ /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/) {
if (prev)
print 0
prev=1
} else {
prev=""
}
print
}' file
如果当前行是IP而前一行也是(未经测试),则应打印0
。
答案 1 :(得分:0)
我刚刚意识到我的数据存在另一个问题。我需要用一定数量的数字替换一系列数字。我真的很难用sed(比如sed "s/[33-64]/64/"
)或awk编写代码,但总是得到错误的结果。它倾向于替换单个数字而不是数字......
我需要的是:替换0-32 - > 32,33-64 - > 64,65-128 - > 128,129-255 - > 255
INPUT:
1.208.121.246
48
49
48
49
1.208.121.250
135
150
1.209.125.134
17
1.209.121.250
99
OUPTUT:
1.208.121.246
64
64
64
64
1.208.121.250
255
255
1.209.125.134
32
1.209.121.250
128
非常感谢最后的建议!