忽略第一行,但仍在使用AWK进行模式匹配期间打印它

忽略第一行,但仍在使用AWK进行模式匹配期间打印它,awk,pattern-matching,Awk,Pattern Matching,我有一个直截了当的问题。如果“文件”第一列(ID)中的元素与“子文件”第一列(ID)中的元素匹配,则“文件”中匹配的元素应替换为“子文件”第二列(即通过符号)中的相应元素 下面的代码工作正常,但将第二列的第一个元素(即A)视为第一列的第一个元素。因此,在模式匹配过程中,将其从最终输出中忽略,并将所有元素向前移动一个单元格,使最后一个单元格留空 我认为可能的解决办法是忽略第一行。有什么建议吗 awk 'FNR==NR {a[$1]=$2;next} {$1=a[$1]}1' OFS="\t" su

我有一个直截了当的问题。如果“文件”第一列(ID)中的元素与“子文件”第一列(ID)中的元素匹配,则“文件”中匹配的元素应替换为“子文件”第二列(即通过符号)中的相应元素

下面的代码工作正常,但将第二列的第一个元素(即A)视为第一列的第一个元素。因此,在模式匹配过程中,将其从最终输出中忽略,并将所有元素向前移动一个单元格,使最后一个单元格留空

我认为可能的解决办法是忽略第一行。有什么建议吗

awk 'FNR==NR {a[$1]=$2;next} {$1=a[$1]}1' OFS="\t" subfile file
文件

子文件

204639_at   ADA
209027_s_at ABI1
224864_at   SRA1
224637_at   OST4
226482_s_at TSTD1
获得的产出:

      B             C   
ADA   1.4063964497  1.9690376378  -0.5856006063
ABI1 -0.6184167971 -0.3803235873   0.6532643621
SRA1  0.9290801469  0.0020026866  -1.2993653537
OST4  0.4688503882 -0.137487333   -0.453195703
TSTD1 -0.0615034202 0.4300315287  -0.6852205341
需要的输出

      A              B                C
ADA   1.4063964497  1.9690376378  -0.5856006063
ABI1 -0.6184167971 -0.3803235873   0.6532643621
SRA1  0.9290801469  0.0020026866  -1.2993653537
OST4  0.4688503882 -0.137487333   -0.453195703
TSTD1 -0.0615034202 0.4300315287  -0.6852205341

我完全不理解你的问题,我甚至看不到GSM155673的任何地方。但是,如果如您所建议的那样,忽略其中一个输入文件的第一行会有所帮助,您可以尝试删除第1行:

awk '{...}' subfile <(sed 1d file)

这将检查是否存在匹配项,如果不匹配,则打印当前存在的值

awk 'FNR==NR {a[$1]=$2;next} a[$1]{$1=a[$1]}1' OFS="\t" subfile file

显然,A是第一行的第一个字段吗?我有一种感觉,你实际上不知道你正在使用的代码是做什么的。试试
FNR>1{$1=a[$1]}1
我想他想包括第一行,但也保留
a
FNR==1 && NR>1 {print; next}
awk 'FNR==NR {a[$1]=$2;next} a[$1]{$1=a[$1]}1' OFS="\t" subfile file