【问题标题】:merge two files having the same value in bash在bash中合并两个具有相同值的文件
【发布时间】:2015-09-30 23:02:03
【问题描述】:

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

文件1

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

文件2

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

感谢您的帮助,

阿尔。

【问题讨论】:

  • join file1 file2 是你的答案,但2015-09-30T13:16:23+01:00 没有出现在第一个文件中,4 是 file2 中第 2 列的错误值
  • 两个文件的行数相同吗?

标签: bash merge


【解决方案1】:

使用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 的文件中。

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

【讨论】:

    猜你喜欢
    • 2018-03-13
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2013-05-23
    相关资源
    最近更新 更多