【问题标题】:how to merge two data based on one如何基于一个合并两个数据
【发布时间】:2018-06-18 01:49:03
【问题描述】:

我有两个数据保存在一个文件夹中的 .txt

data1 称为data 1,包含一列数据如下

from
A0A0A6YXQ7
A0A0A6YXS5
A0A0A6YXW8
A0A0A6YXX6
A0A0A6YXZ1
A0A0A6YY28
A0A0A6YY43
A0A0A6YY47
A0A0A6YY78
A0A0A6YY89
A0A0A6YY91
A0A0A7NQN9

第二个数据有两列fromto

from    to
A0A0A6YXQ7  Myo1f
A0A0A6YXW8  Pak2
A0A0A6YXX6  Arhgap15
A0A0A6YXZ1  Igtp
A0A0A6YY28  pol
A0A0A6YY47  MumuTL
A0A0A6YY78  MumuTL
A0A0A6YY78  MumuTLM
A0A0A6YY91  MumuTL
A0A0A6YY91  MumuTLM

data1 和 data2 有一个名为 from 的列 data1 中的所有字符串都应该在 data2 中。如果不是。

我想加载这两个数据,如果data2中不存在任何字符串,我想把它作为data1放在那里

例如,在data2中缺少以下字符串

A0A0A6YXS5 和 A0A0A6YY43 和 A0A0A6YY89 和 A0A0A7NQN9

所以输出看起来像这样

From       To
A0A0A6YXQ7  Myo1f
A0A0A6YXS5  -
A0A0A6YXW8  Pak2
A0A0A6YXX6  Arhgap15
A0A0A6YXZ1  Igtp
A0A0A6YY28  pol
A0A0A6YY43  -
A0A0A6YY47  MumuTL
A0A0A6YY78  MumuTL;MumuTLM
A0A0A6YY89  -
A0A0A6YY91  MumuTL;MumuTLM
A0A0A7NQN9  -

【问题讨论】:

  • 请展示您的编码工作。
  • 在此处搜索[linux] join 并查看评论man join。祝你好运。

标签: bash unix


【解决方案1】:

怎么样:

#!/bin/bash

declare -A hash

# scan in file2 and make a key-value(s) table
while read line; do
    set -- $line
    if [ -z ${hash[$1]} ]; then
        hash[$1]=$2
    else
        hash[$1]="${hash[$1]};$2"
    fi
done < data2

# read file1 as keys and print appropriate value(s)
while read line; do
    if [ -z ${hash[$line]} ]; then
        echo $line "-"
    else
        echo $line ${hash[$line]}
    fi
done < data1

请注意,“from”和“to”对被意外正确处理。
希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 2019-08-03
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 2019-12-16
    • 2019-05-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多