如何解决从1个文件到另一个文件的vlookup
试图使用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[$0]=1
next
}
$1 in a {
print $1 "," $4
}
awk -f vlookup.awk FILE2 FILE1
解决方法
仅基于显示的示例,请尝试以下操作。
awk 'FNR==NR{a[$1]=$2;next} {print $1,($2 in a?a[$2]:""),$3}' Input_file2 Input_file1
OP尝试中出现的问题: 上述命令中已解决此问题。
- 在读取Input_file2时分配了错误的数组键,根据显示的示例,它不应为
$0
,而应为$1
(第一字段)。 - 这就是为什么
$1
在读取名为Input_file1的第二个Input_file时检查条件时不起作用的原因,因为先前读取的键与之不匹配。
假设文件像样本一样分别在第二列和第一列进行排序,这是一个琐碎的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
对于文件2(例如iSC108)中缺少的任何值,我如何在脚本上集成“ N / A”?
join -12 -21 -o 1.1,1.3 -a1 -e 'N/A' file1.txt file2.txt
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。