【问题标题】:Comparing the column of one file with the row of another file将一个文件的列与另一个文件的行进行比较
【发布时间】:2020-03-05 10:22:31
【问题描述】:

我有 314 个文件的数据(名称如 file1 fil2 file3 ......)。每个文件有两列和不同的行。

示例输入文件 1

a 19
b 9
c 8
i 7
g 6
d 5

示例输入文件2

a 19
i 7
g 6
d 5

我有另一个文件 (data.txt) 有 314 行,每行有不同的列数

a d c g
a i
a d
d c

我想将 file1 的第 1 列与 data.txt 文件的第 1 行进行比较,并将 file2 的第 1 列与 data.txt 的第 2 行进行比较。依此类推,直到 file314 的第 1 列和 data.txt 文件的第 314 行。

我的预期输出是特定文件和特定行匹配和不匹配的基因数量。

我只能使用单独的文件来做到这一点。如何做到这一点我单一的命令。

预期输出

                         Matched   Mismatched     
Ist_file_1st row        4          2
2nd_file_2nd row        2          2
.
.
314_file_314th row      -          -

【问题讨论】:

  • 你的意思是每一行的所有列都应该与每一行的列匹配?还是应该只匹配第一列?
  • 只有第一列。
  • 1 更多澄清应该Ist_column_1st rowIst_file_1st row?我在吗?
  • 是的。我纠正了这一点。

标签: shell awk


【解决方案1】:

最简单的方法如下:

awk '(FNR==NR){$1=$1; a[FNR]=OFS $0 OFS; next}
     f && (FNR==1) { print f,m,nr-m }
     (FNR==1){f++; nr=m=0}
     {nr++; if(a[f] ~ OFS $1 OFS) m++ }
     END { print f,m,nr-m }' data.txt f1.txt f2.txt ... f314.txt

对于OP中提到的data.txt和f1.txt和f2.txt,产生如下输出:

1 4 2
2 2 2

第一列代表文件编号/行,第二列代表总匹配数,第三列总不匹配数。

【讨论】:

  • 非常感谢您的回复,但它给出了所有基因不匹配的输出
  • 通过您上面提供的示例,我得到了您所期望的响应(减去格式)
  • @RaviSaroch 我做了一个小更新来弥补标签的可能使用情况
  • 尊敬的先生,它与给定的样本输入完美配合。我会检查我的原始输入并很快更新给你。
猜你喜欢
  • 2015-06-22
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 2018-04-08
相关资源
最近更新 更多