我需要删除同一行中两次包含字符串的所有行。
示例:
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}'
答案 0 :(得分:3)
使用sed
$ sed -E '/(\b\w+\b).*\b\1\b/d' file
如果重复一个单词,请删除该行。您必须使用单词边界定义单词,否则任何重复的字符都将与正则表达式匹配。
答案 1 :(得分:1)
请您尝试以下。
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
答案 2 :(得分:1)
您可以这样做:
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