スペースで区切られた大きなテキストファイルの値を置き換えようとしていますが、この特定の問題に対する適切な答えが見つかりませんでした:
ヘッダーと約 200 万行を含むファイル「OLD_FILE」があるとします。
COL1 COL2 COL3 COL4 COL5
rs10 7 92221824 C A
rs1000000 12 125456933 G A
rs10000010 4 21227772 T C
rs10000012 4 1347325 G C
rs10000013 4 36901464 C A
rs10000017 4 84997149 T C
rs1000002 3 185118462 T C
rs10000023 4 95952929 T G
...
大きな (280 万行) 変換テーブルを使用して、各行の最初の値を対応する値に置き換えたいと考えています。この変換表では、最初の列に置き換えたい値がリストされ、2 番目の列に対応する新しい値がリストされます。
COL1_b36 COL2_b37
rs10 7_92383888
rs1000000 12_126890980
rs10000010 4_21618674
rs10000012 4_1357325
rs10000013 4_37225069
rs10000017 4_84778125
rs1000002 3_183635768
rs10000023 4_95733906
...
目的の出力は、最初の列のすべての値が変換テーブルに従って変更されたファイルになります。
COL1 COL2 COL3 COL4 COL5
7_92383888 7 92221824 C A
12_126890980 12 125456933 G A
4_21618674 4 21227772 T C
4_1357325 4 1347325 G C
4_37225069 4 36901464 C A
4_84778125 4 84997149 T C
3_183635768 3 185118462 T C
4_95733906 4 95952929 T G
...
追加情報:
パフォーマンスに問題があります (次のコマンドには約 1 年かかります。
abを読んでいる間。do sed -i "s/\b$a\b/$b/g" OLD_FILE ; 完了 < CONVERSION_TABLE
- 交換前に完全一致が必要
- OLD_FILE のすべての値が変換テーブルで見つかるわけではありません...
- ...しかし、置き換えられる可能性のあるすべての値は、変換テーブルで見つけることができます。
どんな助けでも大歓迎です。