比较两个不同列的文件并打印不同列

关于linux:比较两个不同列的文件并打印不同列 | 码农家园 (codenong.com)

Compare two files of different columns and print different columns

我想将file2的第二列与file1的第一列进行比较。 如果它们相等,我想将file1的第二列添加到file2中,如output.txt中所示。

文件2

1
2
3
4

chr5    ENST00000514151    utr5    0    +
chr5    ENST00000512281    utr5    0    +
chr5    ENST00000512281    utr5    0    +
chr5    ENST00000512281    utr5    0    +

文件1

1
2
3

ENST00000512281    a
ENST00000504031    b
ENST00000776348    c

output.txt

1
2
3

chr5    a    ENST00000512281    utr5    0    +
chr5    a    ENST00000512281    utr5    0    +
chr5    a    ENST00000512281    utr5    0    +

我可以比较文件

1

awk 'NR==FNR{a[$1];next}$2 in a{print}' file1 file2

这给出以下输出:

1
2
3

chr5    ENST00000512281    utr5    0    +
chr5    ENST00000512281    utr5    0    +
chr5    ENST00000512281    utr5    0    +

但是我不知道如何将file1的第二列添加到输出中。

 相关讨论


您可以使用a[$1]=$2将file1中的$2值存储到数组中。 因此,您可以尝试:

1
2
3
4
5
6
7

awk '
   NR==FNR{
     a[$1]=$2 ; next }
   $2 in a {
     $1=$1 FS a[$2]
     print
   }' file1 file2

输出:

1
2
3
4
5

chr5 b ENST00000504031 utr5 0 +
chr5 b ENST00000504031 utr5 0 +
chr5 a ENST00000512281 utr5 0 +
chr5 a ENST00000512281 utr5 0 +
chr5 a ENST00000512281 utr5 0 +

说明:

  • 这会使用$1=$1 FS a[$2]修改file2中的$1,其中FS是默认的字段分隔符,它是一个空格..然后重建记录,以便以后可以由print打印。
  • 如果需要,可以将print简化为1。类似于$2 in a { $1=$1 FS a[$2] }1
  • 请注意,这将重建file2中的记录,因此任何空格或制表符序列都将被截断为输出中的单个空格。 要使原始格式保持为file2,可以使用Gnu Awk版本4中的split()函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值