从两个列表中删除重复的单词

问题描述 投票:0回答:1

从列表中删除重复的单词 例子

我们有两个列表,第一个列表包含

a

a
b
c
d

第二个列表包含

b

a
b
c
d
e
f

我想对第一个和第二个列表进行比较,并从第一个和第二个列表中删除匹配项,以便结果是

e
f

我创建了那个脚本

#!/bin/bash
array_1=()
array_2=()
file1='a'
file2='b'
number1=`wc -l $file2 | cut -d ' ' -f 1`
number2=`wc -l $file1 | cut -d ' ' -f 1`

for i in `cat $file1`
do
    array_1[${#array_1[@]}]="$i"
done
for x in `cat $file2`
do
    array_2[${#array_2[@]}]="$x"
done
for n in $(seq 0 $number1)
do
    for nn in $(seq 0 $number2)
    do
        if [[ ${array_2[$n]} == ${array_1[$nn]} ]]
        then
            echo ${array_2[$n]}
        fi
    done
done

我已经创建了这个脚本,但是在尝试删除匹配的单词时,我在使用不等式时遇到一些困难,结果是错误的。 因为一旦 word 检查该字符是否在数组中并且如果存在,那么它将被打印 这与我想要的相反

如果我使用相等,那么结果将与我想要的相反,因为结果将是 两个文本中匹配的单词和不匹配的单词将被删除

bash
1个回答
2
投票

此脚本按指示工作,markp-fuso 感谢您的帮助。

首先,它将文件的值放入数组中。然后它检查兼容性。如果字符在文件

b
中并且它们在文件
a
中,那么它将从数组中删除该值。如果没有,请将其保留在数组中。

再次感谢

markp-fuso
协助整理此内容。

#!/bin/bash
array_1=()
array_2=()
file1='a'
file2='b'

for i in `cat $file1`
do
    array_1+=($i)
done

for x in `cat $file2`
do
    array_2+=($x)
done

for i in `seq 0 ${#array_2[@]}`
do
    for x in `seq 0 ${#array_1[@]}`
    do
        if [[ ${array_2[$i]} == ${array_1[$x]} ]]
        then
            unset 'array_2[$i]'
        fi
    done
done
for line in "${array_2[@]}"
do
    echo $line
done
© www.soinside.com 2019 - 2024. All rights reserved.