从 1 个文件到另一个文件的 vlookup

vlookup from 1 file to another

尝试使用 bash 脚本对文件进行 vlookup,但无法正常工作。知道我错过了什么吗?

第一个文件

NAS88_01 iSC0   360
NAS88_01 iSC1   30016.8
NAS88_01 iSC101 210
NAS88_01 iSC102 210
NAS88_01 iSC103 510
NAS88_01 iSC104 510
NAS88_01 iSC105 510
NAS88_01 iSC106 2102.4
NAS88_01 iSC107 2102.4

第二个文件

iSC0    ilehost1
iSC1    ilehost99
iSC101  ilehost00
iSC102  ilehost21
iSC103  ilehost22
iSC104  ilehost87
iSC105  ilehost11
iSC106  ilehost24
iSC107  ilehost65

期望的输出

NAS88_01 ilehost1  360
NAS88_01 ilehost99 30016.8
NAS88_01 ilehost00 210
NAS88_01 ilehost21 210
NAS88_01 ilehost22 510
NAS88_01 ilehost87 510
NAS88_01 ilehost11 510
NAS88_01 ilehost24 2102.4
NAS88_01 ilehost65 2102.4

试过了但没用。

FNR==NR {
  a[[=13=]]=1  
  next     
}
 in a {  
  print  "," 
}

awk -f vlookup.awk FILE2 FILE1

仅根据您显示的示例,请您尝试以下操作。

awk 'FNR==NR{a[]=;next} {print ,( in a?a[]:""),}' Input_file2  Input_file1

OP 尝试中的问题: 已在上述命令中修复。

  • 在读取 Input_file2 时为数组分配了错误的键,它不应该是 [=11=],应该是 </code>(第一个字段),如示例所示。</li> <li>这就是为什么在读取名为 Input_file1 的第二个 Input_file 时检查条件时 <code> 无法正常工作的原因,因为之前读取的密钥与其不匹配。

假设文件像您的示例一样分别按第二列和第一列排序,这是微不足道的 join:

$ join -12 -21 -o 1.1,2.2,1.3 file1.txt file2.txt
NAS88_01 ilehost1 360
NAS88_01 ilehost99 30016.8
NAS88_01 ilehost00 210
NAS88_01 ilehost21 210
NAS88_01 ilehost22 510
NAS88_01 ilehost87 510
NAS88_01 ilehost11 510
NAS88_01 ilehost24 2102.4
NAS88_01 ilehost65 2102.4

For any value that's missing in file 2, example iSC108, how can i integrate the "N/A" on the script?

join -12 -21 -o 1.1,2.2,1.3 -a1 -e 'N/A' file1.txt file2.txt