Bash 比较两个数组并提取只存在于一个数组中的元素?
比较两个数组并提取仅存在于其中一个数组中的元素的最简单方法是什么 i、 e-整体-减去公共元素集Bash 比较两个数组并提取只存在于一个数组中的元素?,bash,Bash,比较两个数组并提取仅存在于其中一个数组中的元素的最简单方法是什么 i、 e-整体-减去公共元素集 A = [2,3,4,5] B = [1,3,4,5] 摘录1,2 正在尝试在bash中编写脚本 使用awk: awk 'FNR==NR{a[$0];next} $0 in a{delete a[$0]; next} {a[$0]} END{for (i in a) print i}' <(printf "%s\n" "${A[@]}") <(printf "%s\n" "
A = [2,3,4,5]
B = [1,3,4,5]
摘录1,2
正在尝试在bash中编写脚本 使用awk:
awk 'FNR==NR{a[$0];next} $0 in a{delete a[$0]; next} {a[$0]}
END{for (i in a) print i}' <(printf "%s\n" "${A[@]}") <(printf "%s\n" "${B[@]}")
1
2
使用awk:
awk 'FNR==NR{a[$0];next} $0 in a{delete a[$0]; next} {a[$0]}
END{for (i in a) print i}' <(printf "%s\n" "${A[@]}") <(printf "%s\n" "${B[@]}")
1
2
使用awk:
awk 'FNR==NR{a[$0];next} $0 in a{delete a[$0]; next} {a[$0]}
END{for (i in a) print i}' <(printf "%s\n" "${A[@]}") <(printf "%s\n" "${B[@]}")
1
2
使用awk:
awk 'FNR==NR{a[$0];next} $0 in a{delete a[$0]; next} {a[$0]}
END{for (i in a) print i}' <(printf "%s\n" "${A[@]}") <(printf "%s\n" "${B[@]}")
1
2
创建由要比较的两个数组的值索引的第三个数组。在添加第一个数组时为每个条目指定1,在添加第二个数组时为每个条目指定“或”2——如果条目在两个原始数组中,则将比较数组中的值设置为3。注意:这将一个源数组中的多个条目视为一个条目
A=( 2 3 4 5 x x )
B=( 1 3 4 5 )
typeset -A C
for n in "${A[@]}" ; do C[$n]=1 ; done
for n in "${B[@]}" ; do (( C[$n] |= 2 )) ; done
for n in "${!C[@]}" ; do [[ ${C[$n]} -le 2 ]] && echo "$n" ; done
# for n in "${!C[@]}" ; do [[ ${C[$n]} -gt 2 ]] && unset C[$n] ; done
# uniques=( "${!C[@]}" )
创建由要比较的两个数组的值索引的第三个数组。在添加第一个数组时为每个条目指定1,在添加第二个数组时为每个条目指定“或”2——如果条目在两个原始数组中,则将比较数组中的值设置为3。注意:这将一个源数组中的多个条目视为一个条目
A=( 2 3 4 5 x x )
B=( 1 3 4 5 )
typeset -A C
for n in "${A[@]}" ; do C[$n]=1 ; done
for n in "${B[@]}" ; do (( C[$n] |= 2 )) ; done
for n in "${!C[@]}" ; do [[ ${C[$n]} -le 2 ]] && echo "$n" ; done
# for n in "${!C[@]}" ; do [[ ${C[$n]} -gt 2 ]] && unset C[$n] ; done
# uniques=( "${!C[@]}" )
创建由要比较的两个数组的值索引的第三个数组。在添加第一个数组时为每个条目指定1,在添加第二个数组时为每个条目指定“或”2——如果条目在两个原始数组中,则将比较数组中的值设置为3。注意:这将一个源数组中的多个条目视为一个条目
A=( 2 3 4 5 x x )
B=( 1 3 4 5 )
typeset -A C
for n in "${A[@]}" ; do C[$n]=1 ; done
for n in "${B[@]}" ; do (( C[$n] |= 2 )) ; done
for n in "${!C[@]}" ; do [[ ${C[$n]} -le 2 ]] && echo "$n" ; done
# for n in "${!C[@]}" ; do [[ ${C[$n]} -gt 2 ]] && unset C[$n] ; done
# uniques=( "${!C[@]}" )
创建由要比较的两个数组的值索引的第三个数组。在添加第一个数组时为每个条目指定1,在添加第二个数组时为每个条目指定“或”2——如果条目在两个原始数组中,则将比较数组中的值设置为3。注意:这将一个源数组中的多个条目视为一个条目
A=( 2 3 4 5 x x )
B=( 1 3 4 5 )
typeset -A C
for n in "${A[@]}" ; do C[$n]=1 ; done
for n in "${B[@]}" ; do (( C[$n] |= 2 )) ; done
for n in "${!C[@]}" ; do [[ ${C[$n]} -le 2 ]] && echo "$n" ; done
# for n in "${!C[@]}" ; do [[ ${C[$n]} -gt 2 ]] && unset C[$n] ; done
# uniques=( "${!C[@]}" )
您应该添加一条警告,即您发布的
comm
变体只有在输入数组已排序的情况下才起作用,除非您确信OP(以及未来的读者)会很清楚这一点。您应该添加一条警告,即您发布的comm
变体只有在输入数组已排序的情况下才起作用,除非您确信OP(以及未来的读者)会看到它。您应该添加一条警告,即您发布的comm
变体只有在输入数组已排序的情况下才起作用,除非您确信OP(以及未来的读者)会看到它。您应该添加一条警告,即您发布的comm
变体只有在输入数组已排序的情况下才起作用,除非您确信OP(以及未来的读者)会看到它。