![입력 데이터에 대해 수학 연산을 수행하고 인쇄하시겠습니까? [폐쇄]](https://linux55.com/image/10638/%EC%9E%85%EB%A0%A5%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%97%90%20%EB%8C%80%ED%95%B4%20%EC%88%98%ED%95%99%20%EC%97%B0%EC%82%B0%EC%9D%84%20%EC%88%98%ED%96%89%ED%95%98%EA%B3%A0%20%EC%9D%B8%EC%87%84%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
아래와 같이 bash 스크립트를 사용하여 행과 열별로 데이터를 인쇄하려고 합니다.
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
echo "$line"
done < "$1"
{
awk 'BEGIN { print "Points"}
/Points/ { id = $1; }'
}
내 txt 파일은 다음과 같습니다.
Team Played Wins Tied
england 4 3 2
america 9 5 3
터미널의 출력은 다음과 같아야 합니다.
Team Played Wins Tied Points
england 4 3 2 16
america 9 5 3 26
계산은 다음과 같습니다. 팀이 1승을 거두면 승점 4점, 무승부는 승점 2점을 얻습니다. 그런데 수학을 어떻게 하는지 몰라서 할 수가 없어요.
답변1
이를 위해서는 쉘 루프가 전혀 필요하지 않습니다.
awk '{$(NF+1) = NR==1 ? "Points" : $3*4 + $4*2; print}' OFS='\t' input.txt
Team Played Wins Tied Points
A 2 1 1 6
B 2 0 1 2
답변2
일반 bash에서는 다음과 같이 작성합니다.
while read -ra fields; do
if [[ ${fields[0]} == "Team" ]]; then
fields+=("Points")
else
fields+=( $(( 4 * ${fields[2]} + 2 * ${fields[3]} )) )
fi
# changes to IFS variable done inside a subshell
(IFS=$'\t'; echo "${fields[*]}")
done < "$1"