【发布时间】:2014-10-23 16:00:00
【问题描述】:
我遇到了这个问题。
给定一个列表,例如 LIST="a b c . b c . d" 我想以 OUTPUT="a b c . d" 结束
基本上,我希望删除像 uniq 命令这样的重复项,但不会重新排序列表。所以使用排序我不是一个选项。
OUTPUT=
for term in $LIST
do
if [[ -n $( echo "$OUTPUT" | grep -w $term ) ]]; then
echo "$term in output already"
else
OUTPUT="$OUTPUT $term "
echo "$term added to output"
fi
done
echo -e $OUTPUT
此选项的问题 .(dot) 被识别为通配符,因此它与输出中已有的任何内容匹配。我想知道是否有更聪明的方法可以做到这一点,或者是否有一种简单的方法来处理点(。)
【问题讨论】:
-
所以重复的答案对你不起作用?
-
@fedorqui - 类似但不是重复的,因为此处的 OP 需要保留原始顺序,如果应用排序,原始顺序将丢失。另一个问题的所有解决方案都包括一个排序 - 这并不奇怪,因为在那里被要求。
-
dup中的大部分答案使用sort -u。这确实会删除重复的项目,但不希望重新排序列表中的项目。
-
好的!刚重新开张。希望你能得到一些好的答案