![텍스트 파일의 키와 값을 두 개의 개별 배열에 저장하는 방법은 무엇입니까?](https://linux55.com/image/120591/%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%82%A4%EC%99%80%20%EA%B0%92%EC%9D%84%20%EB%91%90%20%EA%B0%9C%EC%9D%98%20%EA%B0%9C%EB%B3%84%20%EB%B0%B0%EC%97%B4%EC%97%90%20%EC%A0%80%EC%9E%A5%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다음 형식으로 게임 점수를 저장하기 위한 텍스트 파일이 있습니다.
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"