텍스트 파일의 여러 문자를 csv의 특정 행 및 열 값으로 바꿉니다.

텍스트 파일의 여러 문자를 csv의 특정 행 및 열 값으로 바꿉니다.

,,,,region2b 등과 .txt같은 다른 항목이 있는 파일이 있습니다.region1aregion1bregion2a

열과 행 값이 다른 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

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

두 번째 파일은 ( 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);

관련 정보