2015-09-30 121 views
0

我试图合并2个文件在一个单一。合并在bash中具有相同值的两个文件

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被添加到文件1的第四列的时间匹配:

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

谢谢你的帮助,

Al。

+1

'join file1 file2'是你的答案,但是'2015-09-30T13:16:23 + 01:00'没有出现在第一个文件中,'4'是文件2中第2列的错误值 –

+0

这两个文件中是否有相同的行数? – anubhava

回答

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文件。

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

相关问题