我正在尝试查找文件中的行是否已存在于另一个文件中,在这种情况下,添加带有文件名的列。
文件1:
CHROM POS REF ALT
chr1 10 T A
chr1 12 T G
chr1 12 T C
文件2:
CHROM POS REF ALT
chr1 12 T C
chr1 13 A T
我想检查文件 2 中的任何行是否在文件 1 中。
预期输出:
CHROM POS REF ALT
chr1 10 T A
chr1 12 T G
chr1 12 T C file2
我试过这个代码:
`awk -F"\t" 'FNR==NR
{
seen[$0];next
}($0 in seen)
{
delete seen[$0]
};
END{
for (x in seen);$(NF+1)="file";print
}
{print}' OFS="\t" file2 file1`
但这并没有按预期工作。这就是我得到的:
CHROM POS REF ALT
chr1 10 T A
chr1 12 T G
chr1 12 T C
chr1 12 T C file2
我怎样才能删除重复的行?谢谢!
你能不能试试以下。
awk '
FNR==1 && FNR==NR{
print
next
}
FNR==NR{
a[$0]=FILENAME
next
}
FNR>1{
print $0,$0 in a?OFS a[$0]:""
}' file2 file1
输出如下。
CHROM POS REF ALT
chr1 10 T A
chr1 12 T G
chr1 12 T C file2
注意:如果 Input_files 是 TAB 分隔的,我们也需要以 TAB 分隔的形式输出,然后BEGIN
在awk
像之后添加一个部分awk 'BEGIN{FS=OFS="\t"}....
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句