【发布时间】:2019-02-21 19:09:17
【问题描述】:
我有两个文件,当文件 2 中的模式与文件 1 中第 3 列或第 7 列的模式完全匹配时,我想使用该模式来提取数据。例如,我想从文件 1 中提取具有值的所有行第 3 列或第 7 列中的“5”。 另外,我想如果文件 2 中每个值的数据可以打印到它自己的新文件中。 所有列都由制表符分隔。
文件 1
... ... RNAME ... ... ... RNEXT
x x 3 x x x 128
x x 102 x x x 5
x x 2 x x x =
x x 5 x x x =
x x 72 x x x 7
x x 5 x x x 251`
文件 2
5
72
1040
251
...
我已使用 awk '($3 == "5" || $7 == "5")' File 1 手动为文件 2 的特定值执行此操作。
文件 3(我希望文件 2 的所有值作为单独的文件)
... ... RNAME ... ... ... RNEXT
x x 5 x x x =
x x 102 x x x 5
x x 5 x x x =
x x 5 x x x 1040
x x 138 x x x 5
x x 5 x x x 251
对于上下文,我的文件 1 是测序数据(.sam 格式)的映射,具有大约 2.5 亿个映射读取(行),文件 2 是感兴趣的重叠群。 任何帮助将不胜感激,谢谢。
【问题讨论】:
-
欢迎来到 SO,所以您的意思是说您想将
5与 file1 的所有内容进行一次比较?并且对于 file1 的所有行,所有行 1 by 1 相同,请确认一次。 -
是的,所以我提取文件 1 的所有行,在第 3 列或第 7 列中带有“5”。对于文件 2 的所有值,依此类推。
-
仍然不清楚,最后一列和其他列的值如何变化?请解释一下。
-
file2 有多少行?应该如何命名输出文件?如果 file1 中的一行在 file2 中出现的两列中都有值,会发生什么?
-
因此列 RNAME 和 RNEXT 可以是 (1-2737) 之间的任何值,如果它们具有相同的值,则在其中一个中使用符号“=”。相同的值也可以在文件中出现多次。我只对这些值中的 160 个(它们是我的文件 2)以及它们出现的所有行感兴趣。所以我想遍历文件 1 的每一行,在文件 2 中搜索一个值(例如“5”) $3 或 $7 列,如果匹配,则提取整行。我希望以“他们正在搜索”的值命名输出文件。 (例如“contig5”、“contig72”、“contig1040”等。