使用 csv 的特定行和列值替换文本文件中的多个字符

使用 csv 的特定行和列值替换文本文件中的多个字符

我有一个包含不同条目的文件,.txt例如region1a,,,,region2b 等。region1bregion2a

我有一个 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

您可以将其转换为此 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);

相关内容