gpt4 book ai didi

bash - 如何使用shell脚本从两个句子中删除重复的单词?

转载 作者:行者123 更新时间:2023-12-03 14:13:13 24 4
gpt4 key购买 nike

我有一个包含重复单词的两个句子,例如,文件my_text.txt 中的输入数据:

The Unix and Linux operating system.
The Unix and Linux system was to create an environmentthat promoted efficient program.


我使用了这个脚本:
while read p
do
echo "$p"|sort -u | uniq
done < my_text.txt
但输出与输入文件的内容相同:

The Unix and Linux operating system.The Unix and Linux system was to create an environment that promoted efficient program


如何从两个句子中删除重复的单词?

最佳答案

您的代码将删除重复的行;两者 sortuniq在线操作,而不是文字操作。 (即便如此,循环也是多余的;如果你想这样做,你的代码应该简化为 sort -u my_text.txt 。)
通常的解决方法是将输入拆分为每行一个单词;现实世界的文本有些复杂,但第一个基本的 Unix 101 实现看起来像

tr ' ' '\n' <my_text.txt | sort -u
当然,这会给您提供与原始单词不同的顺序的单词,并保存每个单词的第一次出现。如果您想丢弃出现多次的任何单词,请尝试
tr ' ' '\n' <my_text.txt | sort | uniq -c | awk '$1 == 1 { print $2 }'
(如果你的 tr 不能识别 \n 作为换行符,可以试试 '\012' 。)
这是一个非常简单的两遍 Awk 脚本,希望它更有用一点。它在第一次通过文件时将所有单词收集到内存中,然后在第二次中删除出现多次的单词。
awk 'NR==FNR { for (i=1; i<=NF; ++i) ++a[$i]; next }
{ for (i=1; i<=NF; ++i) if (a[$i] > 1) $i="" } 1' my_test.txt my_test.txt
这会在删除单词的地方留下空白;使用最终的 sub() 修复应该很容易.
一个更有用的程序会拆分任何标点符号,并将单词减少为小写(这样 WordwordWord!word? 不会被视为单独的)。

关于bash - 如何使用shell脚本从两个句子中删除重复的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65356295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com