【问题标题】:remove repeated items in a list variable in linux在linux中删除列表变量中的重复项
【发布时间】: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。这确实会删除重复的项目,但不希望重新排序列表中的项目。
  • 好的!刚重新开张。希望你能得到一些好的答案

标签: linux list grep uniq


【解决方案1】:
 LIST="a b c . b c . d"
 i=0
 for f in $LIST ; do 
    echo -e "$i\t$f"
    i=$(($i+1))
 done | sort -u -k 2 | sort -n | cut -f2

【讨论】:

  • 有趣的简单方法。今天晚些时候,我将根据其他一些样本列表对其进行测试。谢谢。
  • 这对我正在做的事情非常有效。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 2019-10-11
  • 2011-10-04
  • 2014-09-30
  • 2011-01-13
相关资源
最近更新 更多