다음 두 개의 입력 파일이 있다고 가정해 보겠습니다.
> file1
2
3
4
> file2
10
100
1000
계산하고 싶습니다: 각 줄에 대해 file1/file2, 결과는 file3입니다.
> file 3
0.2
0.03
0.004
Bash의 분할은 다음을 통해 달성할 수 있습니다.$((file1_line/file2_line))
답변1
A paste
와 A 의 조합은 bc
간단한 산술을 위한 좋은 선택입니다.
paste -d/ file1 file2 | bc -l
산출:
.2000000000
.0300000000
.0040000000
좀 더 발전된 예
몇 가지 트릭을 사용하면 더욱 정교해질 수 있습니다. 다음을 포함한다고 합니다 file3
:
6
7
8
다음을 수행 할 수 있습니다 (file1 + file3) / file2
.
paste -d'(+)/' /dev/null file1 file3 /dev/null file2
산출:
(2+6)/10
(3+7)/100
(4+8)/1000
paste
이는 루프가 각 줄의 구분 기호 목록을 반복하기 때문에 작동합니다 .
0으로 나누는 반응
잘못된 작업이 전송되면 bc
경고가 표준 오류로 전송됩니다. 이를 다른 파일로 리디렉션하고 해당 내용에 따라 프로그램 흐름을 결정할 수 있습니다. 예를 들면 다음과 같습니다.
paste -d/ file1 file2 | bc -l > resultfile 2> errorfile
if grep -q 'Divide by zero' errorfile; then
echo "Error in calculation"
else
echo "All is well"
fi
또는 오류가 있는 경우:
paste -d/ file1 file2 | bc -l > resultfile 2> errorfile
if ! file errorfile | grep -q empty; then
echo "Error in calculation"
else
echo "All is well"
fi
답변2
에서 시작하다
paste file1 file2 | awk '{printf "%f\n",$1/$2 } '
어디
paste
파일 "병합"awk
분할은 한 번에 하나씩 계산됩니다.
후행 0이 너무 많은 것이 마음에 들지 않으면 추가하십시오.
... | sed -e s/0*\$//
다음과 같은 경우 종료0
paste file1 file2 | awk '!$2 {exit ; } {printf "%f\n",$1/$2 } '