如何在Bash中使用sed、awk等工具去除每行内的重复单词
解决方案
你可以直接使用awk实现行内单词去重,该方案会保留单词在每行中的首次出现顺序,不会打乱原有排列,完全符合你给出的预期输出效果:
awk '{ delete seen for(i=1; i<=NF; i++) { if (!seen[$i]++) { printf "%s ", $i } } print "" }' 你的输入文件名.txt
如果要直接保存结果到新文件,在命令末尾加重定向即可:
awk '{delete seen; for(i=1;i<=NF;i++) if (!seen[$i]++) printf "%s ", $i; print ""}' 你的输入文件名.txt > 去重后的输出文件名.txt
原方案失效原因
sort file | uniq的作用是对整行内容去重,只有完全相同的整行才会被合并,完全不会处理行内部的重复单词- 你写的while循环中
sort && uniq没有读取当前循环拿到的行内容,相当于每次循环都在等待标准输入,无法处理目标文本
内容的提问来源于stack exchange,提问作者Juliana B C
相关产品推荐
相关产品推荐

