2015-09-30 158 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文件。

請注意,對於大文件,這可能會很慢。

相關問題