从 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
尝试使用 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