如何从$ VAR1中删除$ VAR2值并将剩余值输出到$ VAR3?

uihdff

操作系统: kernel 2.6.x

外壳: POSIX兼容外壳

实用工具: BusyBox 1.25

问题:如何从$ VAR1中删除$ VAR2中的值,并将余数输出到$ VAR3?变量中的每个值均以空格分隔。

逻辑:

VAR1="1 2 3 4 5"
VAR2="1 3 5"
for i in $VAR1
   if $i is not found in $VAR2; do
   append $i to $VAR3
   remove trailing space character
done

所需的输出:

VAR3="2 4"
最小最大

首先,简单但有限的变体

VAR3=$(printf "%d\n" $VAR1 $VAR2 | sort | uniq -u | tr '\n' ' ' | sed 's/\s$//)

$ echo "$VAR3"
2 4

主要缺陷是:它仅保留VAR1变量中的唯一值也就是说,如果$VAR1一个值重复几次,则该值不会出现在中$VAR3,因为它不是唯一的。

例子:

VAR1="1 2 2 3 4 4 4 5"
VAR2="1 3 5"
# the resulting VAR3 variable is empty
VAR3 = "" # because it is containing only unique values and `2` and `4` repeated few times in the `VAR1`, therefore, they are not unique.

# The right result should be
VAR3 = "2 2 4 4 4" 

第二,更普遍和正确的变体

VAR3=$(printf "%s\n" $VAR2 | awk -v var1="$VAR1" '
{arr2[$1] = 1;}

END {
    size = split(var1, arr1); 
    for(i = 1; i <= size; i++) {
        if(!arr2[arr1[i]]) 
            printf "%s ", arr1[i];
    }
}' | sed 's/\s$//')

解释

  1. printf "%s\n" $VAR2-将转换$VAR2为列-每行一个值。
  2. awk ...-$VAR2从中删除$VAR1

    • {arr2[$1] = 1;}-将所有VAR2值(它们awk通过传递给printf)放入数组,其中值成为数组的索引。= 1仅仅意味着真实-这个存在的价值。此技巧为我们提供了下一个行为:第一个值出现创建数组元素,然后,如果再次出现相同的值,它将转到相同的数组索引,换句话说,当相同的值出现几次时,该项不会更改。 。因此,最后,我们将获得该VAR2变量的所有唯一值如果为VAR2="one three five",则为arr2arr2[one] = 1, arr2[three] = 1, arr2[five] = 1
    • END { size = split(var1, arr1);-输入行结束时(VAR2处理完成),我们将拆分VAR1为数组-每个值都进入单独的项目。如果为VAR1="one two three four five",那么我们将获得follow数组:arr1[1] = one, arr1[2] = two, arr1[3] = three ...,依此类推。split函数返回新创建的数组的大小。
    • if(!arr2[arr1[i]]) printf "%s ", arr1[i];-然后,遍历所有arr1项目并进行检查,确实arr2有该项目的索引。例如:i = 1; arr1[1] = "one"那么arr2[arr1[i]]是- arr2[one]该项目存在,请勿打印。i = 2; arr1[2] = "two"那个arr2[two]不存在,所以打印出来。因此,我们将打印中的所有值arr1,而不会出现在中arr2
  3. sed 's/\s$//' -删除尾随空间。

与第一个变体相比,这种方式的优点:

    # It can process strings
    VAR1="one two three four five"
    VAR2="one three five"
    # the resulting VAR3 variable
    VAR3 = "two four"

    # It doesn't remove multiple occurrence of one value in the VAR1
    VAR1="1 2 2 3 4 4 4 5"
    VAR2="1 3 5"
    # the resulting VAR3 variable
    VAR3 = "2 2 4 4 4"

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

最快的PHP等价于javascript`var a = var1 || var2 || var3;`表达式

来自分类Dev

检查是否对于var1的每个唯一值,有一个观察值,按R中的组(var4)得出其值等于var2或var3

来自分类Dev

Ansible-打印消息-调试:msg =“ line1 \ n {{var2}} \ n line3 with var3 = {{var3}}”

来自分类Dev

如何在pi中对sql进行计数,按var1进行count(var2)组?

来自分类Dev

如何检查批次中是否存在多个VAR(从VAR1到VAR10)

来自分类Dev

如何根据变量数(var1,var2等)自动调整R脚本

来自分类Dev

PHP比较效率($ var ==($ var1 || $ var2))

来自分类Dev

SAS:如果Var1为空,如何将单元格内容从Var2移至Var1

来自分类Dev

Var1设置为执行的命令的内容,如何将Var2设置为来自Var1的命令

来自分类Dev

在Java中的crementAndAnd()实现中将getIntVolatile(Object var1,long var2)替换为getInt(Object var1,long var2)

来自分类Dev

我正在尝试制作一个频率表,其中Var1仅使用一个值,而Var3不在表中出现,但过滤表中的数据

来自分类Dev

PHP isset 等于 $var1 或 $var2

来自分类Dev

R / dplyr:var1 * var2矩阵中的文本

来自分类Dev

R中按组滚动var1或var2的计数

来自分类Dev

如何将[{id:1,var1:val1,var2:val2,varX:[time1,time2,time3]}]调和为[{id:1,var1:val1,var2:val2,varX1:time1,varX2:time2 ,varX3:time3}]

来自分类Dev

bash +如何从var2中删除var2中定义的字符串

来自分类Dev

如何解决:“ CA(dt,graph = FALSE)中的错误:以下变量不是定量的Var1”

来自分类Dev

仅当其中的每一行都是$ VAR1或$ VAR2时,才标识并删除整列

来自分类Dev

仅当其中的每一列为$ VAR1或$ VAR2时,才删除整行

来自分类Dev

在C#中lua`local variable = var1或var2`的类似物是什么?

来自分类Dev

当带有var1的语句包含在var2中时(可以这样做吗?)

来自分类Dev

while(stringstream >> var1 >> var2)是安全的做法吗?

来自分类Dev

通过var1和var2设置默认查询

来自分类Dev

将字符串从var1映射到var2(查找)

来自分类Dev

在Python中简化“如果在字符串中为var1或在字符串中为var2:”

来自分类Dev

对于添加到var1的每1个,将1添加到var2

来自分类Dev

PHP ,如何从 php var 中删除 /someting/?

来自分类Dev

在R中将Var1元素随机分配给Var2元素的算法

来自分类Dev

使用Python将字符空间后的字符串分隔为var1和var2

Related 相关文章

  1. 1

    最快的PHP等价于javascript`var a = var1 || var2 || var3;`表达式

  2. 2

    检查是否对于var1的每个唯一值,有一个观察值,按R中的组(var4)得出其值等于var2或var3

  3. 3

    Ansible-打印消息-调试:msg =“ line1 \ n {{var2}} \ n line3 with var3 = {{var3}}”

  4. 4

    如何在pi中对sql进行计数,按var1进行count(var2)组?

  5. 5

    如何检查批次中是否存在多个VAR(从VAR1到VAR10)

  6. 6

    如何根据变量数(var1,var2等)自动调整R脚本

  7. 7

    PHP比较效率($ var ==($ var1 || $ var2))

  8. 8

    SAS:如果Var1为空,如何将单元格内容从Var2移至Var1

  9. 9

    Var1设置为执行的命令的内容,如何将Var2设置为来自Var1的命令

  10. 10

    在Java中的crementAndAnd()实现中将getIntVolatile(Object var1,long var2)替换为getInt(Object var1,long var2)

  11. 11

    我正在尝试制作一个频率表,其中Var1仅使用一个值,而Var3不在表中出现,但过滤表中的数据

  12. 12

    PHP isset 等于 $var1 或 $var2

  13. 13

    R / dplyr:var1 * var2矩阵中的文本

  14. 14

    R中按组滚动var1或var2的计数

  15. 15

    如何将[{id:1,var1:val1,var2:val2,varX:[time1,time2,time3]}]调和为[{id:1,var1:val1,var2:val2,varX1:time1,varX2:time2 ,varX3:time3}]

  16. 16

    bash +如何从var2中删除var2中定义的字符串

  17. 17

    如何解决:“ CA(dt,graph = FALSE)中的错误:以下变量不是定量的Var1”

  18. 18

    仅当其中的每一行都是$ VAR1或$ VAR2时,才标识并删除整列

  19. 19

    仅当其中的每一列为$ VAR1或$ VAR2时,才删除整行

  20. 20

    在C#中lua`local variable = var1或var2`的类似物是什么?

  21. 21

    当带有var1的语句包含在var2中时(可以这样做吗?)

  22. 22

    while(stringstream >> var1 >> var2)是安全的做法吗?

  23. 23

    通过var1和var2设置默认查询

  24. 24

    将字符串从var1映射到var2(查找)

  25. 25

    在Python中简化“如果在字符串中为var1或在字符串中为var2:”

  26. 26

    对于添加到var1的每1个,将1添加到var2

  27. 27

    PHP ,如何从 php var 中删除 /someting/?

  28. 28

    在R中将Var1元素随机分配给Var2元素的算法

  29. 29

    使用Python将字符空间后的字符串分隔为var1和var2

热门标签

归档