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

时间:2019-04-03 14:57:18

标签: awk carriage-return

我正在尝试在一个文件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

实际输出:


2 个答案:

答案 0 :(得分:2)

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

dos2unix fileA fileB

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

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

答案 1 :(得分:1)

您可以尝试使用tr和grep:

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