我有以下代码:
get_list_a() { $MYSQL -B -u $USER --passwword="$PW" $DB <<EOF select name, value from mytable_a EOF } get_list_b() { $MYSQL -B -u $USER --passwword="$PW" $DB <<EOF select name, value from mytable_b EOF } get_list_a >$test.txt
现在我需要首先组合a和b并删除所有重复项(键是名称,第一列),然后将它们写入test.txt。列表a和列表b本身被假定为不同的。如果b中a和y中的x存在,使得x.name = y.name,那么我只想保留x。 我该怎么做?
答案 0 :(得分:2)
您希望list_A中的所有记录都由list_B中的所有记录补充 列表A中没有匹配的名称。数学上这是:
A + B - {w in B | (w,value) in A }
根据访问和所需的效率,有很多方法可以实现这一目标。
以下是您的问题的示例解决方案(从两个名称/值列表开始):
#!/bin/bash
A="Smith value1
Jones value2
Wilson value3"
B="Smith value10
Wilson value11
Fox value12
Brown value13"
PrevName="Not a valid name"
echo "$A
$B" | sort -k1 |
while read Name Value
do
if [ "$Name" != "$PrevName" ]; then
echo $Name $Value
fi
PrevName="$Name"
done > outfile
这是输出:
Brown value13
Fox value12
Jones value2
Smith value1
Wilson value11
当然,此解决方案假设您可以更改记录的顺序,如排序步骤中所做的那样。