我正在尝试在一个文件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
实际输出:
答案 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