awk 查找 table,空白列替换

awk lookup table, blank column replacement

我正在尝试使用查找 table 来搜索和替换两个特定的列,并不断得到一个空白列作为输出。我遵循了在堆栈中找到的几个查找 table 示例的语法,但没有任何乐趣。这是每个文件的片段。

示例查找 table -- 想要在我的数据文件中搜索第 1 列的实例,并将它们替换为第 2 列中的相应值(第一行是 header):

 #xyz   type
 N      400
 C13    401
 13A    402
 13B    402
 13C    402
 C14    405

要替换的源文件格式如下:

 1  N      0.293000    2.545000   16.605000     0     2     6    10    14
 2  C13    0.197000    2.816000   15.141000     0     1
 3  13A    1.173000    2.887000   14.676000     0
 4  13B   -0.319000    3.756000   14.937000     0
 5  13C   -0.351000    1.998000   14.678000     0
 6  C14    0.749000    3.776000   17.277000     0     1

查找的第 2 列中的相应值 table 将替换我的源文件第 6 列中的值(当前全为零)。这是我认为应该工作的 awk one-liner:

awk -v OFS='\t' 'NR==1 { next } FNR==NR { a[]=; next }  in a { =a[] }1' lookup.txt source.txt

但我的输出基本上删除了第 6 列的整个条目:

1   N     0.293000  2.545000    16.605000       2   6   10  14
2   C13   0.197000  2.816000    15.141000       1
3   13A   1.173000  2.887000    14.676000   
4   13B  -0.319000  3.756000    14.937000   
5   13C  -0.351000  1.998000    14.678000   
6   C14   0.749000  3.776000    17.277000       1

(第六列应该是 400 到 405。我考虑过使用 sed,但是我在查找 table 的源和输出列中有重复的值,所以在这种情况下不起作用。令人沮丧的是,前一周我让这个 one-liner 处理几乎完全相同的源文件,但现在只能得到这种行为。我希望能够修改我的 awk 调用以查找两个不同的同时列,但现在想从简单的开始。谢谢!

您的脚本中有 =a[] 而不是 =a[]

$ awk -v OFS='\t' 'NR==FNR{map[]=; next} {=map[]} 1' file1 file2
1       N       0.293000        2.545000        16.605000       400     2       6       10      14
2       C13     0.197000        2.816000        15.141000       401     1
3       13A     1.173000        2.887000        14.676000       402
4       13B     -0.319000       3.756000        14.937000       402
5       13C     -0.351000       1.998000        14.678000       402
6       C14     0.749000        3.776000        17.277000       405     1