linux - 如何将两个文件中不匹配的行存储到新文件

标签 linux awk

我有两个输入文件,如下所示,我需要将第二个文件中的不匹配行写入新文件。文件中的每一列均由制表符空格分隔

输入1

1       94564350        .       C       A
1       94564350        .       C       T

输入2

1       94564351        .       A       T
1       94564351        .       A       C
1       94564350        .       C       A

输出是

1       94564351        .       A       T
1       94564351        .       A       C

我已经尝试过这个命令

awk -F"\t" 'NR==FNR{a[$0];next}($2 in a)&& $1>=3' fileB fileA >fileC

但不工作。

awk 'NR == FNR{a[$0];next} !($0 in a)'  fileA fileB

上面的命令对于大文件也花费了太多时间是否有其他选项可以执行相同的操作

最佳答案

尝试一下来自Idiomatic awk的这个:

awk 'NR == FNR{a[$0];next} !($0 in a)'  fileA fileB

您不需要分配 -F="\t",awk 会在此类文件上正确解释它。

测试

$ awk 'NR == FNR{a[$0];next} !($0 in a)'  fileA fileB
1       94564351        .       A       T
1       94564351        .       A       C

关于linux - 如何将两个文件中不匹配的行存储到新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16915821/

相关文章:

linux - 通过匹配文本替换下一个文件列值中的值列

regex - 如何使用 AWK 将带逗号的字段括在引号中?

awk - 将 'u' 转换为 't' 而无需更改 FASTA 中的 header

linux - awk打印每个文件

awk - 将百分比添加到制表符分隔文本中的列

shell - 在 .csv 文件中使用 shell 脚本在逗号上拆分字符串但忽略双引号内的逗号?

linux - 使用作为 bash 脚本参数传递的 glob 表达式

c++ - 我可以在不授予库读取权限的情况下动态链接吗?

linux - gnuplot 基本绘图问题

linux - 如何在启动和关闭时启动和停止 bash 脚本?