라인 쌍을 얻고 곱하기

라인 쌍을 얻고 곱하기

bash를 사용하여 일부 값에 대한 html 파일을 구문 분석하려고 합니다. 그래서 저는 이와 같은 숫자가 포함된 큰 텍스트 파일을 가지고 있습니다.

3
2
4
2

내가 원하는 것은 두 줄을 얻고 두 숫자를 곱한 다음 변수에 값을 저장하고 합계에 추가하는 것입니다. 이 경우에는 3*2=6and 가 됩니다 4*2=8. 그럼 .X=0, X=X+6, X=X+8X=14

답변1

노력하다

xargs -n2 < file | while read x y; do ((X+=x*y)); echo $X; done
  • xargs -n2: 숫자를 쌍으로 그룹화합니다.
  • read x y: 첫 번째와 두 번째 숫자를 변수에 저장 x하고y
  • ((...))bash의 산술 평가일 뿐입니다.

합계가 어떻게 증가하는지 화면에서 볼 수 있습니다.

답변2

paste다음을 사용하여 bc원하는 것을 수행 할 수 있습니다 .

$ paste -d"*" - - <file.txt | paste -d"+" - - | bc
14

고장

paste여기서 우리는 한 번에 2개씩 취하고 그 사이에 곱셈 기호를 넣는 것을 볼 수 있습니다 .

$ paste -d"*" - - <file.txt
3*2
4*2

비슷한 접근 방식을 사용하여 곱셈 기호를 포함할 수 있습니다.

$ paste -d"*" - - <file.txt | paste -d"+"
3*2+4*2

마지막으로 완성된 문자열을 전달하여 bc수학 연산을 수행할 수 있습니다.

$ paste -d"*" - - <file.txt | paste -s -d'+' | bc
14

paste위 명령의 사용은 다양합니다. X*Y를 형성하기 위해 선 병합을 수행할 때 붙여넣기에 2개의 선(대시로 표시됨: - -)을 사용하도록 지시합니다. 두 번째 경우에는 paste전체 문자 시리즈를 가져와 +각 원자 사이에 통합하는 데 사용합니다 .

답변3

해결책 은 다음과 같습니다 awk(짝수 줄 가정).

 awk '{y=$0; getline x; var += x*y};END{print var}' file.txt

관련 정보