如何查看一个命令的输出是否在另一个命令的输出中?

查克

我有两个命令。第一个,当存储在脚本变量中时,给出如下输出:

one two three four five

第二个也给出了一个列表,但可能缺少第一个命令中的一些项目:

one three five

如果某个项目在第一个命令中但不在第二个命令中,我希望我的脚本执行某些操作。所有项目都没有空格(它们往往是kabab-format)。我怎样才能在 Bash 中做到这一点?

标记融合

一种使用当前变量并依赖于单个值不包含嵌入空格这一事实的方法:

$ var1='one two three four five'
$ var2='one three five'
$ comm -23 <(printf "%s\n" ${var1} | sort) <(printf "%s\n" ${var2} | sort)
four
two

注意:千万不能包裹${var1},并${var2}引用在双引号,即我们喂养时出现的单词拆分printf电话


使用关联数组跟踪唯一值的另一个想法:

var1='one two three four five'
var2='one three five'

unset      arr
declare -A arr

for f in ${var1}          # use ${var1} values as indices for arr[]
do
    arr[${f}]=1           # '1' has no meaning other than to fill requirement of assigning a value in order to create the array entry
done

for f in ${var2}          # delete ${var2} indices from arr[]
do
    unset arr[${f}]
done


for i in "${!arr[@]}"     # display arr[] indices that remain
do
    echo "${i}"
done

# one-liners (sans comments)

for f in ${var1}; do arr[${f}]=1; done
for f in ${var2}; do unset arr[${f}]; done
for i in "${!arr[@]}"; do echo "${i}"; done

这会产生:

two
four

笔记:

  • 再次提醒,不要包住${var1},并${var2}引用在双引号,即,我们希望发生词的拆分
  • 如果倾向于 OP 可以在单个awk脚本中执行相同的添加/删除数组操作
  • 第一个循环(填充arr[]from ${var1})将消除 from 的重复项${var1},例如,var1='one one one'将导致单个数组条目:arr[one]=1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将一个命令的输出除以另一个命令的输出?

是否可以将一个命令的输出放到另一个命令的中间

如何使用一个命令的输出作为另一个命令的bash完成

如何从另一个命令的输出中以命令开始

如何根据shell脚本中另一个命令的输出运行命令?

一个bash命令,该命令使用另一个bash命令的输出

grep使用另一个命令的输出

Ubuntu:运行另一个命令的输出

将命令输出用于另一个

提取另一个命令输出的模式列表

重击:在另一个命令中使用一个命令的输出

使用一个命令的输出作为另一个命令的参数

在bash中,将一个命令的输出逐行输入到另一个命令中

如何将命令输出作为多个参数传递给另一个命令

如何将单个结果从locate命令的输出传递到另一个命令?

如何将单个内容从命令输出传递到另一个命令?

如何使用命令输出作为另一个命令的参数?

如何将 Powershell 命令的输出用作另一个 Powershell 命令的参数?

在另一个命令中调用Symfony控制台命令并禁止输出

如何在linux中使用一个命令的输出作为另一个命令

两个命令的输出如何不同,一个是另一个的符号链接?

使用一个awk输出到另一个awk命令

将一个命令的输出传递给另一个

将命令的输出与另一个的最后一个字段合并

显示Laravel artisan命令输出(从另一个命令调用的命令)

检查给定端口是否包含在输出中,如果正在运行另一个命令

使用awk或类似方法在另一个命令的输出中查找下一个单词

如何在同时在控制台上显示命令的同时,将命令的输出传递给另一个命令?

如果通过管道将cat命令传递到另一个命令,如何停止cat命令的输出?