다음 형식으로 게임 점수를 저장하기 위한 텍스트 파일이 있습니다.
Name: score
Bash 스크립트를 사용하여 이름을 한 배열에 넣고 점수를 다른 배열에 넣으려고 했습니다. 내 첫 번째 방법은 cut
다음 명령을 사용합니다.
names=(cut -d: -f1 ./scores.txt)
scores=(cut -d: -f2 ./scores.txt)
하지만 이 방법은 배열의 첫 번째 항목에 이름과 점수를 모두 넣기 때문에 그다지 효율적이지 않으며, 처음 5개의 값을 다른 변수에 넣어서 사용하고 싶은데 불편합니다. 그런 다음 다음 명령을 사용해 보았습니다 awk
.
names=(awk -F: '{ print $0 }' ./scores.txt)
scores=(awk -F: '{ print $1 }' ./scores.txt)
이것은 똑같은 일을 합니다.
구문 분석된 모든 값을 자체 배열 요소에 넣는 방법이나 이를 효율적으로 저장하는 완전히 다른 접근 방식에 대한 제안이 있는 사람이 있습니까? 또한 어떤 이유로 이 작업은 Bash에서 수행되어야 합니다.
답변1
입력 파일에 개행의 모든 이름/점수 조합이 포함되어 있다고 가정하면 다음과 같이 필요한 작업이 수행됩니다.
while read line; do
names+=($(echo "$line" | awk '{print $1}' | tr -d ':'))
scores+=($(echo "$line" | awk '{print $2}'))
done < "$INPUT_FILE"