Bash 스크립트의 동적 변수 문제

Bash 스크립트의 동적 변수 문제

다음 형식의 .txt 파일을 얻고 싶습니다.

chr1: 3
chr2: 3
chr3: 3

다음 스크립트를 사용하지만 다른 오류가 발생합니다.

#!/bin/bash
touch number_samples.txt
for i in {10..22}
do
    a="chr$i:"
    b='\t' 
    c=3
    d='\n' 
    e="$a$b$c$d"
    echo $e > number_samples.txt
done

참고: c=3도구의 출력이 됩니다. c= tool query -l input.txt | wc -l 즉, 숫자(단어 수)입니다.

어떻게 해야 하나요?

답변1

당신은 그것을 사용할 수 있습니다명령 대체명령의 출력을 바꿉니다.

그것은 다음과 같습니다:

c=$(tool query -l input.txt | wc -l)

그러나 >파일에 추가하려면 .를 사용하므로 >>.

또한 변수는 모두 불필요한 것으로 보이며 애초에 파일이 있을 실제 이유가 없습니다 touch. 다음을 통해 이 작업을 수행할 수 있어야 합니다.

#!/bin/bash
for i in {10..22}
do
    printf '%s\t%s\n' "chr${i}:" "$(tool query -l input.txt | wc -l)" >> number_samples.txt
done

또는 파일이 이 루프의 데이터로만 채워져 있는지 확인하고 존재할 수 있는 모든 데이터를 지우려면 루프 출력을 파일에 쓸 수 있습니다.

#!/bin/bash
for i in {10..22}
do
    printf '%s\t%s\n' "chr${i}:" "$(tool query -l input.txt | wc -l)" 
done > number_samples.txt

하지만 출력은 각 반복마다 tool query -l input.txt | wc -l동일하므로 input.txt각 반복에서 일부 변경을 하려는지 잘 모르겠습니다.

Steeldriver가 제안한 대로 c변경할 계획이 없다면 루프 없이 이 작업을 수행할 수 있습니다.

c=$(tool query -l input.txt | wc -l)
printf "chr%d\t$c\n" {10..22} > number_samples.txt

관련 정보