テキストファイルの複数の文字をcsvの特定の行と列の値に置き換えます。

テキストファイルの複数の文字をcsvの特定の行と列の値に置き換えます。

、、、、region2bなどの.txt他の項目を含むファイルがあります。region1aregion1bregion2a

列と行の値が異なるExcelファイルがあります。テキストファイルの内容を特定の行と列の値に置き換えregion1、他の列と行の値に置き換えたいと思いますregion2

どのように進むべきかわかりません。助けてくれてありがとう。

  • サンプルExcelファイルは次のとおりです。

    サンプルExcelファイルは次のとおりです。

  • テキストファイルは次のとおりです

    p1 (region1a    region1b -0.1);
    p2 (region1a    region1b 5);
    
    p1 (region2a    region2b -0.1);
    p2 (region2a    region2b 5);
    
  • 期待される出力

    p1 (-0.01703    0.08515 -0.1);
    p2 (-0.01703    0.08515 5);
    
    p1 (0.02297 0.08515  -0.1);
    p2 (0.02297 0.08515  5);
    

以下はExcelファイルの例です。

ベストアンサー1

このcsv(input.csv)から始めてください。

no,a,b
region1,-0.01703,0.08515
region2,0.02297,0.08515

out.tsvこのTSV()に変換できます。

region1a    -0.01703
region1b    0.08515
region2a    0.02297
region2b    0.08515

ミラーの使用(https://github.com/johnkerl/miller)と実行

mlr --c2t reshape -i a,b -o item,value then put '$field=$no.$item' then cut -o -f field,value ./input.csv | tail -n +2 >./out.tsv

2番目のファイルは(input.txt)です。

p1 (region1a    region1b -0.1);
p2 (region1a    region1b 5);

p1 (region2a    region2b -0.1);
p2 (region2a    region2b 5);

その後、bashスクリプトでforループを簡単に実行できます

#!/bin/bash

set -x

cp ./input.txt ./output.txt
while IFS=$'\t' read -r region value; do
    sed -i -r 's/'"$region"'/'"$value"'/g' ./output.txt
done <./out.tsv

output.txtなるだろう

p1 (-0.01703    0.08515 -0.1);
p2 (-0.01703    0.08515 5);

p1 (0.02297    0.08515 -0.1);
p2 (0.02297    0.08515 5);

おすすめ記事