使用sed删除重复的单词

时间:2014-10-23 13:00:19

标签: regex sed

我一直在寻找帮助我获得所需输出的代码。输入文件包含最多8列,最少4列。经过研究,我发现它属于分组/反向引用的范畴。我尝试使用sed但无济于事。数据包含8到15位数字,IP地址和字母。从$ 2开始,$ 2的字符串中有一个重复,最多为5次。格式如下;

输入文件:

410011515534576 923000720575 10.225.4.236 CokeVPN
410011515534579 923000720578 923000720578 923000720578 10.225.4.239 CokeVPN
410018137112489 923054440014 923054440014 923054440014 923054440014 10.225.1.212 CokeVPN

期望的输出:

410011515534576 923000720575 10.225.4.236 CokeVPN
410011515534579 923000720578 10.225.4.239 CokeVPN
410018137112489 923054440014 10.225.1.212 CokeVPN

我希望删除列中的这些重复条目。请帮忙!!

2 个答案:

答案 0 :(得分:0)

如果您只想获得第一列和最后一列,可以使用以下awk单行:

awk '{$2=$(NF-2); $3=$(NF-1); $4=$NF; NF=4}1' file

它返回:

410011515534576 923000720575 10.225.4.236 CokeVPN
410011515534579 923000720578 10.225.4.239 CokeVPN
410018137112489 923054440014 10.225.1.212 CokeVPN

它通过将第二个参数设置为倒数第二个来重置该行,将第三个参数设置为倒数第二个,将第四个参数设置为倒数第二个,将最后一个设置为最后一个。然后1触发awk的默认操作:{print $0}


为了确保不拧其他线,可以添加一个条件:只要字段数大于或等于4,就这样做:

awk 'NF>=4{$2=$(NF-2); $3=$(NF-1); $4=$NF; NF=4}1' file

答案 1 :(得分:0)

您可以使用此sed命令使用对组2的反向引用来替换可能的重复:

sed 's/^\([^ ]* \)\([^ ]*\)\( \2\)* /\1\2 /' file