使用awk基于公共行合并两个文本文件
我有两个选项卡分隔的文本,如以下示例: 小示例1:使用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
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
。不知道你尝试了什么,得到了什么。