Unix命令将file1中的字段添加到file1中匹配的键控记录

时间:2015-06-29 19:54:28

标签: unix

我在Unix中的编码技能有限,所以我正在寻求帮助。

我有两个文件进入:

文件1:

列名

密钥计数

68150    500
68220    300
68448    200
68778    500

file2的:

68150    53
68171     6
68448    18
68778    05
68993    13

我需要的是: 1 - 2个文件之间所有唯一键的单个记录。 2 - 密钥匹配的位置将计数字段加在一起。

输出文件:

68150    553
68171      6
68220    300
68448    215
68778    505
68993    13

我看过一个'加入' ' COMM' ' DIFF'和'排序'命令,它们似乎不是我需要的。

1 个答案:

答案 0 :(得分:-1)

bash中,这应该有效(假设输入文件为/tmp/file1/tmp/file2

join -a 1 -a 2 <(sort -b /tmp/file1) <(sort -b /tmp/file2) | while read a b c; do
    echo $a $((${b:-0} + ${c:-0}))
done

让我一步一步解释:

首先,我们必须加入这些行(并通过传递-a 1 -a 2而不删除任何不匹配的记录)

$ join -a 1 -a 2 <(sort -b /tmp/file1) <(sort -b /tmp/file2)
68150 500 53
68171 6
68220 300
68448 200 18
68778 500 05
68993 13

然后,我们可以使用read a b c逐行阅读所有内容,因此第一列将位于$a中,第二列位于$b中,第三列位于$c中。我们必须解决的最后一个问题是它可能只有两列而不是三列,但在bash中这很容易:如果非空,${c:-0}将评估为$c并且默认值为{{ 1}}否则。

哦,使用0我们可以进行计算。最终输出:

$(( expr ))