我以为我理解如何合并文件。你能告诉我,我的剧本中的问题在哪里?
INPUT:
文件1
c.001A>C 11 p.His103 A
c.000A>C 12 p.Thr102 E
c.111A>C 12 p.Thr102 D
file2的
APC 5 112835056 ENST00000507379 13 c.001A>C p.Val599Phe
APC 5 112819143 ENST00000257430 9 c.1111G p.G371X
APC 5 1128395514 ENST00000257430 15 c.001A>C p.Glu1309AspfsT
APC 5 112838773 ENST00000257430 15 c.000A>C p.Gln1062Ter
输出:
APC 5 112835056 ENST00000507379 13 c.001A>C p.Val59 c.001A>C 11 p.His103 A
APC 5 1128395514 ENST00000257430 15 c.001A>C p.Glu1 c.001A>C 11 p.His103 A
APC 5 112838773 ENST00000257430 15 c.000A>C p.Gln10 c.000A>C 12 p.Thr102 E
到目前为止,已尝试使用以下awk
行:
awk -F'\t' -v OFS="\t" 'FNR==NR{a[$1]=$1FS$2FS$3FS$4; next} {if ($6 in a) print $0, a[$1]}' file1 file2
我想将file1 column1与file2 column6合并,并仅打印匹配和两个文件中的所有列。但它不起作用。 谢谢
答案 0 :(得分:2)
如果您可以使用GNU工具,则可以使用join
,sort
和column
命令合并这两个文件:
$ join -1 1 -2 6 -o "2.1 2.2 2.3 2.4 2.5 2.6 2.7 1.3 1.4" <(sort file1) <(sed 's/ \+/ /g' file2 | sort -k6) | column -t
APC 5 112838773 ENST00000257430 15 c.000A>C p.Gln1062Ter p.Thr102 E
APC 5 1128395514 ENST00000257430 15 c.001A>C p.Glu1309AspfsT p.His103 A
APC 5 112835056 ENST00000507379 13 c.001A>C p.Val599Phe p.His103 A
join
命令根据file1的第一列和file2的第6列合并文件。此命令需要使用<(...)
对两个文件进行排序输入。选项-o
列出了您要显示的所有列。
注意sed
命令会删除重复的空白区域,以便为sort
(第二个文件)提供正确的列号。
最后column -t
很好地以列样式显示字段。
答案 1 :(得分:0)
不确定输出中的第6个字段之谜(在评论中也提到)如果是错字,那么下面的内容可以帮助你。
awk 'FNR==NR{a[$1]=$0;next} ($(NF-1) in a){print $0,a[$(NF-1)]}' file1 file2