如果一个字符串出现在一行中两次,如何删除该行



我需要删除所有在同一行中包含两次字符串的行。

示例:

hi 
hi hello
hi hello hey
hey hi:hello:hi #delete this line

结果:由于最后一行包含两次"hi"。字符串没有用任何固定的分隔符正确分隔,有时它是空格、逗号或冒号,也可能是任何字符。

hi 
hi hello
hi hello hey

如果它是固定的基于列的数据,我可以使用:(大致想法(

awk '{for(i=1;i<=NF;i++) if($i ~/hi/) c++ ;if(c<2) print $0}'

使用sed可能会更容易

$ sed -E '/(bw+b).*b1b/d' file

如果一个单词重复,删除该行。您必须用单词边界来定义单词,否则任何重复的字符都将与正则表达式匹配。

请您尝试以下操作。

awk -F'[ :#]' '{for(i=1;i<=NF;i++){if(++a[$i]>1){delete a;next}};delete a} 1'   Input_file

输出如下。

hi
hi hello
hi hello hey

您可以这样做:

awk -F'[ :;,]' '{ delete seen; for(i=1; i<=NF; i++) {seen[$i]++} # parse words and store in a hash             
for(i in seen) if(seen[i] == 2) {next}                    # skip line if it has a word that is repeated two times
}1' file

最新更新