从列表中删除重复的单词 例子
我们有两个列表,第一个列表包含
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 检查该字符是否在数组中并且如果存在,那么它将被打印 这与我想要的相反
如果我使用相等,那么结果将与我想要的相反,因为结果将是 两个文本中匹配的单词和不匹配的单词将被删除
此脚本按指示工作,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