在bash中合并两个具有相同值的文件

时间:2015-09-30 13:46:58

标签: bash merge

我正在尝试将两个文件合并为一个。

FILE1

2015-09-30T13:30:57+01:00 6 1
2015-09-30T13:30:58+01:00 6 1
2015-09-30T13:30:59+01:00 6 1
2015-09-30T13:31:00+01:00 6 1
2015-09-30T13:31:01+01:00 6 1
2015-09-30T13:31:02+01:00 6 1
2015-09-30T13:31:04+01:00 6 1

FILE2

2015-09-30T13:16:19+01:00 4
2015-09-30T13:16:20+01:00 7
2015-09-30T13:16:21+01:00 7
2015-09-30T13:16:22+01:00 8
2015-09-30T13:16:23+01:00 8
2015-09-30T13:16:24+01:00 7
2015-09-30T13:16:25+01:00 2
2015-09-30T13:16:26+01:00 4
2015-09-30T13:16:27+01:00 1
2015-09-30T13:30:58+01:00 1

我想要得到的结果是将FILE2中的第2列添加到FILE1作为时间匹配的第四列:

2015-09-30T13:30:57+01:00 6 1 4
2015-09-30T13:16:23+01:00 8 3 1

感谢您的帮助,

的Al。

1 个答案:

答案 0 :(得分:0)

使用cut查找第一列,并使用嵌套while loop来比较第一列:

#!/usr/bin/bash

printf "" > FILE3
while read line1; do           
    file1_first_col=$(printf "${line1}" | cut -f1 -d' ')
    printf "${line1}" >> FILE3
    while read line2; do           
        file2_first_col=$(printf "${line2}"| cut -f1 -d' ')
        if [[ "${file1_first_col}" == "${file2_first_col}" ]]; then
            file2_second_col=$(printf "${line2}" | cut -f2 -d' ')
            printf " ${file2_second_col}" >> FILE3
        fi
    done < FILE2
    printf "\n" >> FILE3
done < FILE1 

然后将结果打印到名为FILE3的文件中。

请注意,对于大文件,这可能会非常慢。