比较两个文件unix和打印数据

时间:2016-11-16 12:24:11

标签: shell unix awk sed

我有两个文件:

文件1:

   JOB1/JOB1_Backup #45,45,SUCCESS,20161115T23:30:00
   Testing/Linux_Git #113,113,SUCCESS,20161115T11:13:08
   Sales and Distri/Master Booking/MCAB CI Pipe/Cloud_test  #27,27,SUCCESS,20161115T17:40:38
   Sales and Distri/Master Booking/MCAB CI Pipe/Common Components #36,36,SUCCESS,20161115T13:21:36
   UF_Test/backup/JOB4/TEST_JOB_NEW #14,14,FAILURE,20161115T09:13:03

file2的:

 JOB1/JOB1_Backup 11223344
 Sales and Distri/Master Booking/MCAB CI Pipe/Cloud_test 22334455
 Sales and Distri/Master Booking/MCAB CI Pipe/Common Components 99887766
 JF_DEV/dev and test/job7 55667744
输出应该是:

 11223344 JOB1/JOB1_Backup #45,45,SUCCESS,20161115T23:30:00 
          Testing/Linux_Git #113,113,SUCCESS,20161115T11:13:08
 22334455 Sales and Distri/Master Booking/MCAB CI Pipe/Cloud_test #27,27,SUCCESS,20161115T17:40:38
 99887766 Sales and Distri/Master Booking/MCAB CI Pipe/Common Components #36,36,SUCCESS,20161115T13:21:36
          UF_Test/backup/JOB4/TEST_JOB_NEW #14,14,FAILURE,20161115T09:13:03

到目前为止尝试过:

awk 'FNR==NR {a[$1]; next} $1 in a' file1 file2

任何帮助都是适当的

2 个答案:

答案 0 :(得分:1)

试试这个 -

#awk 'NR==FNR{a[$1]=$NF;next;} {print ($0 ? a[$1] OFS $0 :$0)}' file2 file1
11223344   JOB1/JOB1_Backup #45,45,SUCCESS,20161115T23:30:00
    Testing/Linux_Git #113,113,SUCCESS,20161115T11:13:08
99887766    Sales and Distri/Master Booking/MCAB CI Pipe/Cloud_test  #27,27,SUCCESS,20161115T17:40:38
99887766    Sales and Distri/Master Booking/MCAB CI Pipe/Common Components #36,36,SUCCESS,20161115T13:21:36
    UF_Test/backup/JOB4/TEST_JOB_NEW #14,14,FAILURE,20161115T09:13:03
  

说明 -

{print ($0 ? a[$1] OFS $0 :$0)}使用三元运算符来使用左外连接结果。

答案 1 :(得分:1)

awk '
  NR == FNR {
    val = $NF           # save the last field
    NF--                # discard the last field
    value[$0] = val     # map the new line to the (previous) last field
    next
  }
  {
    val = ""
    for (str in value) {
      if (index($0, str) > 0) {
        val = value[str]
        break
      }
    }
    printf "%-8s %s\n", val, $0
  }
' file2 file1