Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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:使用管道并基于两个不同的列合并两个表_Bash_Sorting_Join - Fatal编程技术网

Bash:使用管道并基于两个不同的列合并两个表

Bash:使用管道并基于两个不同的列合并两个表,bash,sorting,join,Bash,Sorting,Join,我知道以前有人以各种方式问过这个问题,但我至今找不到解决办法 我有两个没有标题的文件,我想在两个不同的列上左键连接,但join抱怨我的文件(或其中一个)尚未排序 另一件事是我需要使用管道中的第一个文件(这就是为什么我在下面的示例中使用cat) 这是我的两份文件 #out1 阿德|12351 gnl|Prokka |阿德|18 阿德|12368 gnl|Prokka |阿德|18 阿德|12369 gnl|Prokka |阿德|18 阿德|80878 gnl|Prokka |阿德|6311 #o

我知道以前有人以各种方式问过这个问题,但我至今找不到解决办法

我有两个没有标题的文件,我想在两个不同的列上左键连接,但
join
抱怨我的文件(或其中一个)尚未排序

另一件事是我需要使用管道中的第一个文件(这就是为什么我在下面的示例中使用
cat

这是我的两份文件

#out1
阿德|12351 gnl|Prokka |阿德|18
阿德|12368 gnl|Prokka |阿德|18
阿德|12369 gnl|Prokka |阿德|18
阿德|80878 gnl|Prokka |阿德|6311
#out2
gnl | Prokka | Ad | 1节点(长度)1532695(cov)20.805081 100.000 1532695 0 1 1532695 1 1532695 0.0 2.830e+06
gnl | Prokka | Ad | U 2节点(U 1110392)长度(U 1110392)cov(U 51.706023 100.000 1110392 0 1 1110392 1 1110392 0.0 2.051e+06
gnl | Prokka | Ad|u 3节点_3长度_1073395 _cov_25.049683 100.000 1073395 0 1 1073395 1 1073395 0.0 1.982e+06
gnl | Prokka | Ad|u 4_4_长度_942458_cov_21.166101 100.000 942458 0 1 942458 1 942458 0.0 1.740e+06
gnl | Prokka | Ad|u 5节点(长度)u934614_cov_54.686741 100.000 934614 0 1 934614 1 934614 0.0 1.726e+06
gnl | Prokka | Ad | U 6节点(U 822594)长度(U cov)U 21.071332 100.000 822594 0 0 1 822594 1 822594 0.0 1.519e+06
gnl | Prokka | Ad|u 7节点(长度)775953(cov)51.943039 100.000 775953 0 1 775953 1 775953 0.0 1 1.433e+06
gnl | Prokka | Ad | 8节点(8长度)669799(20.124807 100.000 669799 0 1 669799 1 669799 0.0 1.237e+06
gnl | Prokka | Ad | 9节点(长度)669094(大写)52.446878 100.000 669094 0 1 669094 1 669094 0.0 1.236e+06
gnl | Prokka | Ad | U 10节点| U 10长度U 656226covU 8.484500 100.000 656226 0 1 656226 1 656226 0.0 1.212e+06
gnl | Prokka | Ad|u 11节点_11长度_561745 _cov_235.394513 100.000 561745 0 1 561745 1 561745 0.0 1.037e+06
gnl | Prokka | Ad | 12节点(长度)557414(cov)8.035369 100.000 557414 0 1 557414 1 557414 0.0 1.029e+06
gnl | Prokka | Ad|U 13节点_13长度_540856_cov_40.368085 100.000 540856 0 1 540856 1 540856 0.0 9.988e+05
gnl | Prokka | Ad | 14节点(长度)510936(cov)13.262043 100.000 510936 0 1 510936 1 510936 0.0 9.435e+05
gnl | Prokka | Ad|u 15节点_15_长度_471976 _cov_52.281100 100.000 471976 0 0 1 471976 1 471976 0.0 8.716e+05
gnl | Prokka | Ad | U 16节点(U 469438)长度(U cov)40.667960 100.000 469438 0 1 469438 1 469438 0.0 8.669e+05
gnl | Prokka | Ad|u 17节点(长度)468675(cov)21.008559 100.000 468675 0 1 468675 1 468675 0.0 8.655e+05
gnl | Prokka | Ad|u 18节点_18长度_465405 _cov_219.905046100.000 465405 0 1 465405 0.0 8.594e+05
gnl | Prokka | Ad|u 19节点(长度)464169(cov)13.391522 100.000 464169 0 1 464169 1 464169 0.0 8.572e+05
gnl | Prokka | Ad | U 20节点(U 20长度)U 415362(U cov)U 20.670704 100.000 415362 0 1 415362 1 415362 0.0 7.670e+05
gnl | Prokka | Ad|u 21节点_21长度_411782 _cov_56.949841 100.000 411782 0 1 411782 1 411782 0.0 7.604e+05
gnl | Prokka | Ad|u 22节点_22长度_408727_cov_13.361336 100.000 408727 0 1 408727 1 408727 0.0 7 7.548e+05
实际上,第二个文件要大得多(大约100000行)

下面是我想做的:我想根据
out1
的第二列和
out2
的第一列连接这两个文件

不排序加入会给我一个错误,因为文件没有排序,但在我之前尝试对两个文件进行排序时会发生相同的情况:


cat-out1 | sort-k2 | join-12-21-
$join-12-21-a1-o1.1,1.2,2.2
$join-12-21-a1-o1.1,1.2,2.2谢谢,很好用。如果我想用管道
out1
cat-out1 | awk…
?@littlebird
cat-out1 | awk'.
你能验证你的代码吗
join
的未排序错误。另外,如果我想在命令中使用管道
out1
,如何使用该错误?@littlebird
cat-out1 | sort-k2 | join…-谢谢,效果很好。如果我想管道
out1
cat-out1 | awk…
?@littlebird
cat-out1 | awk'.-out2
你能验证一下吗我们的
sort
命令?我在
join
中得到一个未排序的错误。另外,如果我想在命令中使用管道
out1
,如何使用该错误?@littlebird
cat out1 | sort-k2 | join-
$ join -1 2 -2 1 -a 1 -o 1.1,1.2,2.2 <(sort -k2 out1) <(sort out2)
Ad_12351 gnl|Prokka|Ad_18 NODE_18_length_465405_cov_219.905046
Ad_12368 gnl|Prokka|Ad_18 NODE_18_length_465405_cov_219.905046
Ad_12369 gnl|Prokka|Ad_18 NODE_18_length_465405_cov_219.905046
Ad_80878 gnl|Prokka|Ad_6311
$ awk 'NR==FNR {
  a[$2,++n[$2]]=$1
  next
}
($1 in n) {
  for(i=1;i<=n[$1];++i) {
    print a[$1,i],$1,$2
  }
  delete n[$1]
}
END {
  for(b in n) {
    for(i=1;i<=n[b];++i) {
      print a[b,i],b
    }
  }
}' out1 out2
Ad_12351 gnl|Prokka|Ad_18 NODE_18_length_465405_cov_219.905046
Ad_12368 gnl|Prokka|Ad_18 NODE_18_length_465405_cov_219.905046
Ad_12369 gnl|Prokka|Ad_18 NODE_18_length_465405_cov_219.905046
Ad_80878 gnl|Prokka|Ad_6311