使用awk基于公共行合并两个文本文件

使用awk基于公共行合并两个文本文件,awk,Awk,我有两个选项卡分隔的文本,如以下示例: 小示例1: chr9 35689814 35689922 U2OS_Noco_input_peak_1972 77 . 4.84893 12.13092 7.77385 26 chr9 139793146 139793192 U2OS_Noco_input_peak_2029 49 . 6.30132 9.04134 4.96447 89 chr9 35748701 35748740

我有两个选项卡分隔的文本,如以下示例:

小示例1:

chr9    35689814    35689922    U2OS_Noco_input_peak_1972   77  .   4.84893 12.13092    7.77385 26
chr9    139793146   139793192   U2OS_Noco_input_peak_2029   49  .   6.30132 9.04134 4.96447 89
chr9    35748701    35748740    U2OS_Noco_input_peak_1974   197 .   10.68892    24.88541    19.76040    127
chr9    85677944    85678064    U2OS_Noco_input_peak_1980   44  .   3.93263 8.45104 4.42192 5
chr9    127631470   127631569   U2OS_Noco_input_peak_1997   148 .   11.29185    19.71885    14.86821    74
chr9    140512429   140512570   U2OS_Noco_input_peak_2045   113 .   9.54787 15.99886    11.37007    71
小例子2:

chr9    35748701    35748740    GBA2    0   -   35748701    35749983    0   5   223,269,514,524,276,    
chr9    117880410   117880530   TNC 0   -   117853297   117880536   0   17  
chr9    85677944    85678064    RASEF   0   -   85677782    85678092    0   2   261,310,    0,0,
chr9    35689814    35689922    TPM2    0   -   35689814    35691017    0   6   83,86,96,105,108,1203,  
chr9    139793146   139793192   TRAF2   0   +   139776363   139793192   0   16
我想做一个文件使用他们两个。事实上,我想在前3个字段中取公共行,输出文件将具有前3个字段(其中两个文件之间的行是公共的),并且2个文件中的其他列将位于这3列之后。以下是输出示例:

chr9    35689814    35689922    U2OS_Noco_input_peak_1972   77  .   4.84893 12.13092    7.77385 26  chr9    35689814    35689922    TPM2    0   -   35689814    35691017    0   6   83,86,96,105,108,1203,  
chr9    35748701    35748740    U2OS_Noco_input_peak_1974   197 .   10.68892    24.88541    19.76040    127 chr9    35748701    35748740    GBA2    0   -   35748701    35749983    0   5   223,269,514,524,276,    
chr9    85677944    85678064    U2OS_Noco_input_peak_1980   44  .   3.93263 8.45104 4.42192 5   chr9    85677944    85678064    RASEF   0   -   85677782    85678092    0   2   261,310,    0,0,
我在
awk
中尝试了以下代码,但没有返回我想要的

awk FS=OFS='\t' infile1.txt infile2.txt '$1 = $1, $2= $2, $3=$3 {print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9"\t"$10"\t"$11"\t"$12"\t"$13"\t"$14"\t"$15"\t"$16"\t"$17"\t"$18"\t"$19}' > out.txt
你知道怎么修吗

$ awk 'BEGIN   {FS=OFS="\t"} 
               {k=$1 FS $2 FS $3} 
       NR==FNR {sub(k,OFS); a[k]=$0; next} 
       k in a  {print $0,a[k]}' file.2 file.1 | column -t

chr9  35689814   35689922   U2OS_Noco_input_peak_1972  77   .  4.84893   12.13092  7.77385   26   TPM2   0  -  35689814   35691017   0  6   83,86,96,105,108,1203,
chr9  139793146  139793192  U2OS_Noco_input_peak_2029  49   .  6.30132   9.04134   4.96447   89   TRAF2  0  +  139776363  139793192  0  16
chr9  35748701   35748740   U2OS_Noco_input_peak_1974  197  .  10.68892  24.88541  19.76040  127  GBA2   0  -  35748701   35749983   0  5   223,269,514,524,276,
chr9  85677944   85678064   U2OS_Noco_input_peak_1980  44   .  3.93263   8.45104   4.42192   5    RASEF  0  -  85677782   85678092   0  2   261,310,                0,0,

您缺少预期输出中的第二条记录

你认为
$1=$1…
可以做什么?阅读awk手册的第一页,或者只看本网站或其他网站上的一些示例,你会很快发现代码中的大部分错误。我知道你到目前为止已经问了5个问题,但没有接受任何答案,所以也看看当你得到答案时该怎么办。它不会返回输出。我想打印一个文本文件的输出它清楚地为我工作,并生成张贴的输出;将其保存到文件中非常简单,只需添加
>output.file
。不知道你尝试了什么,得到了什么。