라인 쌍을 얻고 곱하기 [닫기]

라인 쌍을 얻고 곱하기 [닫기]

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

3
2
4
2

내가 원하는 것은 두 행을 취하고 두 숫자를 곱한 다음 변수에 값을 저장하고 합계에 추가하는 것입니다. 이 경우에는 3*2=6및 가 됩니다 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를 형성하기 위해 줄 병합을 수행할 때 Paste에게 2줄(대시로 표시됨: )을 사용하도록 지시합니다 - -. 두 번째 경우에는 paste전체 문자 시리즈를 사용 하고 +각 원자 사이에 하나씩 병합합니다.

답변3

해결책 은 다음과 같습니다 awk(행 개수가 짝수라고 가정).

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

관련 정보