我需要删除所有在同一行中包含两次字符串的行。
示例:
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