Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk vlookup从一个文件到另一个文件_Awk_Sh_Vlookup - Fatal编程技术网

Awk vlookup从一个文件到另一个文件

Awk vlookup从一个文件到另一个文件,awk,sh,vlookup,Awk,Sh,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

尝试使用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尝试中的问题:在上面的命令中修复

  • 读取输入文件2时为数组分配了错误的键,根据所示示例,该键不应为
    $0
    ,而应为
    $1
    (第一个字段)
  • 这就是为什么在读取名为Input\u file1的第二个输入文件时,检查条件时,
    $1
    不起作用,因为上一次读取中的键与条件不匹配

假设文件分别按第二列和第一列进行排序,就像您的示例一样,这是一个简单的
连接

$ 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”


快速提问。对于文件2中缺少的任何值,例如iSC108,我如何将“N/A”集成到脚本中?@gafm,请尝试以下操作,
awk'FNR==NR{A[$1]=$2;next}{print$1,$2在A中?A[$2]:“”,$3;b[$2]}END{For(i在A中){if(!(i在b中)){print“N/A”,i,A[i]}}'file2 file1
将不会更新主要答案,否则可能会混淆用户或未来用户,因为主要问题不同。
join -12 -21 -o 1.1,2.2,1.3 -a1 -e 'N/A' file1.txt file2.txt