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

问题描述 投票:1回答:2

我试图在一个文件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[$1,$2,$3];next}($2,$3,$4) in a{print $0}' 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

实际产量:


awk carriage-return
2个回答
2
投票

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

dos2unix fileA fileB

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

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

1
投票

你可以试试tr和grep:

< fileA tr -d '\r' | grep -f - fileB
© www.soinside.com 2019 - 2024. All rights reserved.