다음과 같은 숫자가 포함된 txt 파일이 있습니다.
1
2
3
4
5
줄 수는 같지만 숫자가 다른 또 다른 txt 파일이 있습니다.
6
7
8
9
10
1+6, 2+7, 3+8 등을 함께 추가하고 싶습니다. 스크립트는 어떻게 작성하나요?
그런데, 나는 지금까지 다양한 답변을 얻었고, 내 파일에서 답변을 시도한 후에야 일부 메소드가 소수를 처리하지 않는다는 것을 깨달았습니다. 내 파일 중 일부에는 소수가 포함되어 있어 정확해야 합니다. 답변에 추가하고 싶다면 소수를 정확하게 계산하는 방법을 보여주실 수 있나요? 감사해요.
답변1
이 paste
라인을 따라 다음과 같이 수학을 수행합니다 bc
.
$ paste -d+ file1 file2 | bc
7
9
11
13
15
중간 결과( 이전 bc
):
$ paste -d+ file1 file2
1+6
2+7
3+8
4+9
5+10
보다 bash 중심 솔루션을 위해 file2에 최소한 file1만큼 많은 줄이 있다고 가정합니다.
mapfile -t file1 < file1
mapfile -t file2 < file2
for((i=0; i < ${#file1[@]}; i++))
do
printf '%d\n' $((file1[i] + file2[i]))
done
...정수가 아닌 경우 다음 아이디어를 결합하세요.
mapfile -t file1 < file1
mapfile -t file2 < file2
for((i=0; i < ${#file1[@]}; i++))
do
printf '%d + %d\n' "${file1[0]}" "${file2[0]}" | bc
done
답변2
이는 다양한 도구로 해결할 수 있는 기본 작업입니다. paste
+ awk
조합이 특히 편리해 보입니다.
$ paste file1 file2 | awk '{$0=$1+$2}1'
7
9
11
13
15
답변3
유일한 awk
해결책
awk '(getline a <"file2") <= 0 {exit}; {print $0 + a}' file1
답변4
좋아, 이것은 약간 난해하지만 bash 산술 paste
도 있습니다 sed
.
$ # debug
$ paste -d+ <(sed 's/\(.*\)/echo $((\1/' file1) <(sed 's/\(.*\)/\1))/' file2)
echo $((1+6))
echo $((2+7))
echo $((3+8))
echo $((4+9))
echo $((5+10))
$ eval "$(paste -d+ <(sed 's/\(.*\)/echo $((\1/' file1) <(sed 's/\(.*\)/\1))/' file2))"
7
9
11
13
15