我试图在一个文件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
实际产量:
当输入文件具有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