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