テキストを値に置き換える

テキストを値に置き換える

1つにマージする必要がある2つのファイルがあります。

ファイル1の例:

gene_1  578
gene_2  565
gene_3  3
gene_4  77
gene_5  8
gene_6  0
gene_7  45
gene_8  67
gene_9  0
gene_10 65

ファイル2の例:

COG0430 gene_5 gene_9       
COG1949 gene_1 gene_3 gene_6
COG5049 gene_2 gene_4 gene_7 gene_10
COG5104 gene_8

出力ファイルは次のようにする必要があります。

COG0430 8 0 
COG1949 578 3 0
COG5049 565 77 45 65
COG5104 67

この問題を解決できる命令を知っている人はいますか?

ベストアンサー1

#!/bin/bash
declare -A arr
readarray -t lines < "file1"

for line in "${lines[@]}"; do
   arr[${line%% *}]=${line#* }
done

readarray -t lines2 < "file2"

for line in "${lines2[@]}"; do
    echo -n "${line%% *} "
    for word in $line; do
        echo -n "${arr[$word]} "
    done
    echo
done

最もクリーンなbashではありませんが、動作します。また、bash> = 4.2であることを確認してください。

おすすめ記事