awk 代码输出具有匹配字段的行,但没有输出

awk code to output lines with matching fields, but no output

我试图在一个文件 fileB 中输出与另一个文件 fileA 中的参数匹配的行,但我的尝试没有输出任何内容。

fileA:

chr1    7237    7238
chr1    7637    7637
chr1    7908    7908
chr1    8045    8045
chr1    8329    8329
chr1    8358    8358
chr1    8375    8375
chr1    8381    8381

fileB:(注意第五行多了一列)

130 chr1    7237    7238    0k9imgkt
135 chr1    7637    7637    b9gko
138 chr1    7908    7908    kob9g
139 chr1    8045    8045    34e5rg  4r
151 chr1    8329    8329    b
151 chr1    8346    8346    345y46htyh
151 chr1    8346    8346    76jtuj
152 chr1    8358    8358    asfge

我的代码:

awk 'NR==FNR{a[,,];next}(,,) in a{print [=12=]}' fileA fileB

预期输出:

130 chr1    7237    7238    0k9imgkt
135 chr1    7637    7637    b9gko
138 chr1    7908    7908    kob9g
139 chr1    8045    8045    34e5rg  4r
151 chr1    8329    8329    b
152 chr1    8358    8358    asfge

实际输出:


当输入文件有 Windows 行结尾(即 \r\n)时会发生这种情况。使用 dos2unix 工具修复您的输入文件,您的命令将起作用。

dos2unix fileA fileB

或者,如果您使用的是 gawk 或 mawk,请将记录分隔符设置为 \r\n:

awk -v RS='\r\n' ...

您可以尝试使用 tr 和 grep :

< fileA tr -d '\r' | grep -f - fileB