、、、、region2bなどの.txt
他の項目を含むファイルがあります。region1a
region1b
region2a
列と行の値が異なるExcelファイルがあります。テキストファイルの内容を特定の行と列の値に置き換えregion1
、他の列と行の値に置き換えたいと思いますregion2
。
どのように進むべきかわかりません。助けてくれてありがとう。
サンプル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);
答え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);