Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如果一个文件有两列,而另一个文件有一列,有没有办法找到两个文件之间的公用行?文件太大,无法在R中工作_Linux_Grep - Fatal编程技术网

Linux 如果一个文件有两列,而另一个文件有一列,有没有办法找到两个文件之间的公用行?文件太大,无法在R中工作

Linux 如果一个文件有两列,而另一个文件有一列,有没有办法找到两个文件之间的公用行?文件太大,无法在R中工作,linux,grep,Linux,Grep,我在Linux中有两个文件 一个文件有两列和3亿行,另一个文件有一列和1498行(来自HG19的SNPs rs ID) 第一个文件如下所示。第一列有坐标,在相关值(1:10019:TA:T)之间有冒号,第二列有ID(rs775809821) 第二个文件只有一列,如下所示 rs11234969 rs372076 rs10417746 rs2476601 rs10760127 我想将第二个文件中的值与第一个文件中的值进行匹配,这样我就可以得到一个最终文件,其中包含文件2中所有可能的行以及文

我在Linux中有两个文件 一个文件有两列和3亿行,另一个文件有一列和1498行(来自HG19的SNPs rs ID)

第一个文件如下所示。第一列有坐标,在相关值(1:10019:TA:T)之间有冒号,第二列有ID(rs775809821)

第二个文件只有一列,如下所示

rs11234969

rs372076

rs10417746

rs2476601

rs10760127
我想将第二个文件中的值与第一个文件中的值进行匹配,这样我就可以得到一个最终文件,其中包含文件2中所有可能的行以及文件1中的坐标

我尝试过“grep”和awk,但没有成功

       grep -F file1.txt file2.txt | cut -d ' ' -f1 > grep.txt

最后一个文件应该有所有可能的ID(rs…),这些ID在两个文件中都是相同的,并且都有坐标。

这将输出每个文件的ID,例如:
rs11234969.txt
rs372076.txt
,等等。每个文件都包含文件one.txt的相关ID和类似ID的格式

#!/bin/bash

while read line
do
    awk -v line=$line '{if($2==line)print $0}' one.txt >${line}.txt
done <two.txt
#/bin/bash
读行时
做
awk-v line=$line'{if($2==line)print$0}'one.txt>${line}.txt

完成以下是纠正错误的命令:

grep -wnF -f file2.txt file1.txt > grep.txt
输出将包含文件
file1.txt
中的行号,后跟冒号和相应的行

请注意,这要求
file2.txt
不包含空行,并且这些行不被空格或其他空白/隐藏符号包围。 如果上述某些条件不正确,请使用以下条件:

sed 's/^[ \t]*\([^ \t]*\)[ \t]*$/\1/; /^[ \t]*$/d' file2.txt | \
  grep -wnF -f /dev/stdin file1.txt > grep.txt

看起来好像坐标中没有任何ID特征。所以你自己的方法非常接近,我只是建议做一点小小的改变

grep -f file2 file1 > new_file

问题是,您确实不想使用包含3亿行的文件作为模式文件,首先是因为它有永远不匹配的额外数据(坐标),但也因为它的大小。

在示例数据中,
file2
中的
rs
值在
file1
中都不可用。第二个文件很小,很容易装入RAM。我建议使用perl来完成这项任务,但在任何语言中都可以使用相同的方法。1.将第二个文件读入关联数组2。循环浏览大文件中的行,将每行拆分为列。对于关联数组中存在ID列的每一行,打印该行。在Perl中,即使你不使用尾随的成语,也可以是大约7到8行代码总量。你可以使用GNUAWK或者使用C程序或C++程序使用或考虑。也许32GB的RAM可能有用。顺便说一句,您的任务可能与相关-通过电子邮件与我联系至
basile@starynkevitch.net
但请提及问题的URL,并用几段书面英语解释细节和上下文。我不知道什么是HG19
grep -f file2 file1 > new_file