【问题标题】:vlookup from 1 file to anothervlookup 从一个文件到另一个
【发布时间】:2020-12-06 17:48:06
【问题描述】:

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


    【解决方案1】:

    仅基于您显示的示例,您能否尝试以下操作。

    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 时检查条件时不起作用的原因,因为之前读取的键与它不匹配。

    【讨论】:

    • 快速提问。对于文件 2 中缺少的任何值,例如 iSC108,我如何在脚本上集成“N/A”?
    • @gafm,您能否尝试关注,awk 'FNR==NR{a[$1]=$2;next} {print $1,$2 in a?a[$2]:"",$3;b[$2]} END{for(i in a){if(!(i in b)){print "N/A",i,a[i]}}}' file2 file1 不会更新主要答案,否则可能会混淆或未来的用户,因为主要问题不同。
    【解决方案2】:

    假设文件像您的示例一样分别按第二列和第一列排序,这很简单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,2.2,1.3 -a1 -e 'N/A' file1.txt file2.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多