我需要找到ip的前三个部分的所有值,如果重复,我将第四部分更改为.255。
示例:
216.239.35.207
216.239.35.209
216.239.35.209
209.85.255.97
209.85.255.97
216.239.35.207
216.239.35.207
216.239.35.209
216.239.35.207
216.239.35.207
216.239.35.207
216.239.35.207
216.239.35.209
变为
216.239.35.255
216.239.35.255
216.239.35.255
209.85.255.97
209.85.255.97
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
由于
答案 0 :(得分:1)
根据OP's answer修改了答案,似乎他的代码会查找前三个字段重复的块。如果只有一个块,请不要管它,如果至少有两个块,(即一个块的三个字段重复另一个块),更改这些行的 4th 字段。
使用管道工具查找具有重复字段 1-3 的块,然后使用第二 uniq
仅找到重复的块,(要更改的块) ,然后使用它们生成一些sed
代码来完成工作:
cut -d. -f1,2,3 data | uniq -d | sort | uniq -d |
sed 's#.*#/^&./s/.*/&.255/#' | sed -f - data
输出:
216.239.35.255
216.239.35.255
216.239.35.255
209.85.255.97
209.85.255.97
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
这个答案避免了:
答案 1 :(得分:0)
正如你所教导的猜测所说,awk
是你的朋友。但说实话,你的问题非常简洁。您可以使用与下面编码类似的行执行某些操作。请随时修改。
# awk -v FS='.' -v OFS='.' 'BEGIN{i=1}NR==FNR{rec[i]=$0;$4="";pref[i++]=$0;next}
END{
pref[0]=pref[1];pref[i]=pref[i-1]
for(i=1;i<=NR;i++){
if(match(pref[i-1],pref[i+1]))
sub(/.[0-9]+$/,".255",rec[i]);
print rec[i];
}
}' case_file_48238278
216.239.35.255
216.239.35.255
216.239.35.209
209.85.255.97
209.85.255.97
216.239.35.207
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
答案 2 :(得分:0)
最后,这个shell脚本解决了这个问题:
#!/bin/bash
cat tt4 | sort -u | cut -d. -f1,2,3 > tmp1
awk 'BEGIN {while ((getline < "tmp1") > 0) { a[$0]++; if(a[$0] == 2) print;
if (a[$0] >= 2) print }}' | sort -u > tmp2
while read line
do
a=`echo $line | cut -d. -f1,2,3`
if [ `cat tmp2 | grep $a` ]; then
fin=.255
b=`echo $a$fin`
echo $b
else
echo $line
fi
done < tt4
结果是
216.239.35.255
216.239.35.255
216.239.35.255
209.85.255.97
209.85.255.97
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.35.255
216.239.36.255
216.239.36.255
答案 3 :(得分:0)
这可能适合你(GNU sed):
sed -r 'N;s/(.*\.).*\n\1.*/\1255\n\1255/;P;D' file
将连续的类似IP地址更改为以255
sed 's/216\.239\.35\..*/&255/' file
将特定类型的IP更改为以255