Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Bash Unix-比较两个文件并逐行对齐_Bash_Unix - Fatal编程技术网

Bash Unix-比较两个文件并逐行对齐

Bash Unix-比较两个文件并逐行对齐,bash,unix,Bash,Unix,我有两个文件: 第一个具有如下所有序列名称: comp10604_c0_seq1 comp108_c0_seq1 comp11450_c0_seq1 comp11655_c0_seq1 comp11804_c0_seq1 comp13465_c0_seq1 comp13695_c0_seq1 comp10604_c0_seq1 AB491617.1 comp11450_c0_seq1 AM920464.1 comp11655_c0_seq1 HQ865168.1 comp11804_c0_se

我有两个文件: 第一个具有如下所有序列名称:

comp10604_c0_seq1
comp108_c0_seq1
comp11450_c0_seq1
comp11655_c0_seq1
comp11804_c0_seq1
comp13465_c0_seq1
comp13695_c0_seq1
comp10604_c0_seq1 AB491617.1
comp11450_c0_seq1 AM920464.1
comp11655_c0_seq1 HQ865168.1
comp11804_c0_seq1 KC900889.1
comp13465_c0_seq1 HM590421.1
comp13695_c0_seq1 GU474930.1
comp10604_c0_seq1 AB491617.1
comp108_c0_seq1 NAN
comp11450_c0_seq1 AM920464.1
comp11655_c0_seq1 HQ865168.1
comp11804_c0_seq1 KC900889.1
comp13465_c0_seq1 HM590421.1
comp13695_c0_seq1 GU474930.1
第二个有关于这些序列的信息,但缺少关于如下某些序列的信息:

comp10604_c0_seq1
comp108_c0_seq1
comp11450_c0_seq1
comp11655_c0_seq1
comp11804_c0_seq1
comp13465_c0_seq1
comp13695_c0_seq1
comp10604_c0_seq1 AB491617.1
comp11450_c0_seq1 AM920464.1
comp11655_c0_seq1 HQ865168.1
comp11804_c0_seq1 KC900889.1
comp13465_c0_seq1 HM590421.1
comp13695_c0_seq1 GU474930.1
comp10604_c0_seq1 AB491617.1
comp108_c0_seq1 NAN
comp11450_c0_seq1 AM920464.1
comp11655_c0_seq1 HQ865168.1
comp11804_c0_seq1 KC900889.1
comp13465_c0_seq1 HM590421.1
comp13695_c0_seq1 GU474930.1
我想要一个文件,其中替换换行符并插入序列名称(如果序列中没有以下信息):

comp10604_c0_seq1
comp108_c0_seq1
comp11450_c0_seq1
comp11655_c0_seq1
comp11804_c0_seq1
comp13465_c0_seq1
comp13695_c0_seq1
comp10604_c0_seq1 AB491617.1
comp11450_c0_seq1 AM920464.1
comp11655_c0_seq1 HQ865168.1
comp11804_c0_seq1 KC900889.1
comp13465_c0_seq1 HM590421.1
comp13695_c0_seq1 GU474930.1
comp10604_c0_seq1 AB491617.1
comp108_c0_seq1 NAN
comp11450_c0_seq1 AM920464.1
comp11655_c0_seq1 HQ865168.1
comp11804_c0_seq1 KC900889.1
comp13465_c0_seq1 HM590421.1
comp13695_c0_seq1 GU474930.1

感谢您的帮助

您的输入已排序。您可以使用
join
;为缺少的字段指定值:

join -e "NaN" -a1 -a2 -o 1.1 2.2 first second
对于您的示例输入,它将生成:

comp10604_c0_seq1 AB491617.1
comp108_c0_seq1 NaN
comp11450_c0_seq1 AM920464.1
comp11655_c0_seq1 HQ865168.1
comp11804_c0_seq1 KC900889.1
comp13465_c0_seq1 HM590421.1
comp13695_c0_seq1 GU474930.1

如果希望对齐,请将输出管道连接到
列-t

您的输入显示为已排序。您可以使用
join
;为缺少的字段指定值:

join -e "NaN" -a1 -a2 -o 1.1 2.2 first second
对于您的示例输入,它将生成:

comp10604_c0_seq1 AB491617.1
comp108_c0_seq1 NaN
comp11450_c0_seq1 AM920464.1
comp11655_c0_seq1 HQ865168.1
comp11804_c0_seq1 KC900889.1
comp13465_c0_seq1 HM590421.1
comp13695_c0_seq1 GU474930.1

如果您希望对齐,请将输出导入
列-t

如果您的文件已排序,并且只希望比较一列,则答案正确

下面是使用awk的另一种方法:

awk 'NR==FNR{seq[$1]=$2;next}{print $1,($1 in seq?seq[$1]:"NaN")}' file2 file1
comp10604_c0_seq1 AB491617.1
comp108_c0_seq1 NaN
comp11450_c0_seq1 AM920464.1
comp11655_c0_seq1 HQ865168.1
comp11804_c0_seq1 KC900889.1
comp13465_c0_seq1 HM590421.1
comp13695_c0_seq1 GU474930.1

我们首先遍历file2,将column2作为值存储到在column1处索引的数组中。对于file1,我们打印列1并检查数组中是否存在键。如果是这样,我们将打印它旁边的值,否则我们将打印
NaN

如果您的文件已排序,并且您只希望比较一列,则答案正确

下面是使用awk的另一种方法:

awk 'NR==FNR{seq[$1]=$2;next}{print $1,($1 in seq?seq[$1]:"NaN")}' file2 file1
comp10604_c0_seq1 AB491617.1
comp108_c0_seq1 NaN
comp11450_c0_seq1 AM920464.1
comp11655_c0_seq1 HQ865168.1
comp11804_c0_seq1 KC900889.1
comp13465_c0_seq1 HM590421.1
comp13695_c0_seq1 GU474930.1

我们首先遍历file2,将column2作为值存储到在column1处索引的数组中。对于file1,我们打印列1并检查数组中是否存在键。如果是这样,我们将打印它旁边的值,否则我们将打印
NaN

如果我想同时加入信息文件中的多个列?@muramasa join一次加入2个文件,将结果传输到另一个join,该join将前一个join的STDOUT作为输入,第三个文件作为另一个输入。请参阅
info join
了解更多信息。如果我想同时加入信息文件中的多个列?@muramasa join一次加入2个文件,将结果传输到另一个join,该join将前一个join的STDOUT作为输入,第三个文件作为另一个输入。有关更多信息,请参阅
info join