【发布时间】:2014-10-19 19:48:10
【问题描述】:
我有一个很长的列表(约 100 行),其中包含动物的名称、它们在哪里被发现以及何时命名为 spottings。前 3 行可能是这样的:
cat 1999 madagascar
dog 1827 peru
kangaroo 1995 new zealand
cat 1827 england
现在我想将该列表与另一个列表 want 进行匹配,如下所示:
cat
dog
kangaroo
但是,我只想获取与给定year 匹配但不与给定location 匹配的行。例如,对于1827 和england,我是这样做的:
cat spottings | grep -i -f want | sed '/1827/I!d;/england/Id'
现在,如果我的 year 和 location 位于这样的字符串中:
want="1827,1999,2013" # year
nonotwant="england,madagascar,peru" # location
它被做成这样的数组:
want=($(echo ${want} | tr ',' '\n'))
如果我检查want和donotwant的所有元素,它会是这样的:
sed spottings | grep -i -f want | sed '/1827/I!d;/1999/I!d;/2013/I!d;/england/Id;/madagascar/Id;/peru/Id'
如何检查两个数组中的所有元素?
【问题讨论】:
-
为了消除歧义,你会为给定的
want和nonotwant显示你想要的输出吗?此外,命令sed '/1827/I!d;/1999/I!d将删除所有行,除非它们的年份在同一行上。相反,您是否希望它消除所有行,除非它们有一个或另一个?请澄清。