Shell-Script
使用 csv 的特定行和列值替換文本文件中的多個字元
我有一個
.txt
包含不同條目的文件,例如region1a
,region1b
,region2a
, region2b 等。我有一個具有不同列和行值的 excel 文件。我想使用特定的行和列值來替換
region1
文本文件中的say,並使用不同的列和行值來替換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);
從此 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);