다음 형식의 .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