我有一个这样的名字列表:
dog_bone
dog_collar
dragon
cool_dragon
lion
lion_trainer
dog
我需要提取出现在其他名称中的名称,如下所示:
dragon
lion
dog
我浏览了uniq
手册页,但似乎是比较整行而不是字符串。有什么方法可以通过bash函数执行此操作吗?
file=/the/file.txt
while IFS= read -r string; do
grep -Fe "$string" < "$file" | grep -qvxFe "$string" &&
printf '%s\n' "$string"
done < "$file"
那会在文件的每一行运行一个read
,两个grep
甚至是一个printf
命令,因此效率不高。
您可以通过一次awk
调用完成全部操作:
awk '{l[NR]=$0}
END {
for (i=1; i<=NR; i++)
for (j=1; j<=NR; j++)
if (j!=i && index(l[j], l[i])) {
print l[i]
break
}
}' < "$file"
尽管这意味着整个文件都存储在内存中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句