Shell-Script

使用 csv 的特定行和列值替換文本文件中的多個字元

  • February 11, 2021

我有一個.txt包含不同條目的文件,例如region1a, region1b, region2a, region2b 等。

我有一個具有不同列和行值的 excel 文件。我想使用特定的行和列值來替換region1文本文件中的say,並使用不同的列和行值來替換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 文件的範例

從此 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);

引用自:https://unix.stackexchange.com/questions/633637