gpt4 book ai didi

file - 使用 awk 连接两个文件

转载 作者:行者123 更新时间:2023-12-02 03:58:25 24 4
gpt4 key购买 nike

我有两个如下所示的文件,它们是制表符分隔的:

文件A

chr1   123 aa b c d
chr1 234 a b c d
chr1 345 aa b c d
chr1 456 a b c d
....

文件B

xxxx  abcd    chr1   123    aa    c    d    e
yyyy defg chr1 345 aa e f g
...

我想将基于 3 列的两个文件加入“chr1”、“123”和“aa”,并将文件 B 中的前两列添加到文件 A,这样输出如下所示:输出:

chr1   123    aa    b    c    d    xxxx    abcd
chr1 234 a b c d
chr1 345 aa b c d yyyy defg
chr1 456 a b c d

任何人都可以帮助在 awk 中完成此操作吗?如果可能的话使用 awk oneliners?

最佳答案

这是使用 awk 的一种方法:

$ awk 'NR==FNR{a[$3,$4]=$1OFS$2;next}{$6=a[$1,$2];print}' OFS='\t' fileb filea
chr1 123 a b c xxxx abcd
chr1 234 a b c
chr1 345 a b c yyyy defg
chr1 456 a b c

说明:

NR==FNR             # current recond num match the file record num i.e in filea
a[$3,$4]=$1OFS$2 # Create entry in array with fields 3 and 4 as the key
next # Grab the next line (don't process the next block)
$6=a[$1,$2] # Assign the looked up value to field 6 (+rebuild records)
print # Print the current line & the matching entry from fileb ($6)

OFS='\t' # Seperate each field with a single TAB on output

编辑:

对于 3 字段问题,您只需添加额外的字段即可:

$ awk 'NR==FNR{a[$3,$4,$5]=$1OFS$2;next}{$6=a[$1,$2,$3];print}' OFS='\t' fileb filea
chr1 123 aa b c xxxx abcd
chr1 234 a b c
chr1 345 aa b c yyyy defg
chr1 456 a b c

关于file - 使用 awk 连接两个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13258604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com