我有一个包含不同条目的文件,.txt
例如region1a
,,,,region2b 等。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
您可以将其转换为此 TSV ( out.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
您拥有的第二个文件是 ( 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);