변수에 값을 할당하는 한 줄씩 파일 줄 읽기
다음 .txt 파일이 있습니다.
Marco
Paolo
Antonio
한 줄씩 읽고 각 줄마다 변수에 .txt 행 값을 할당합니다.가 ★★★★★★★★★★★★★★★★★★★★★★★$name
을 사용하다
- 파일에서 첫 줄 읽기
- 「」의 할당
$name
마르코 - 해서 하다와 같이 을 해 보세요.
$name
- 파일에서 두 번째 줄 읽기
- 「」의 할당
$name
" "Paolo
다음은 인수로 전달된 파일을 한 줄씩 읽어냅니다.
while IFS= read -r line; do
echo "Text read from file: $line"
done < my_filename.txt
이것은 루프 내의 파일에서 행을 읽기 위한 표준 형식입니다.설명:
IFS=
(오류)IFS=''
)는 선행/후행 공백을 잘라내는 것을 방지합니다.-r
백슬래시 이스케이프가 해석되지 않도록 합니다.
또는 bash 파일 도우미 스크립트에 넣을 수 있습니다.내용 예:
#!/bin/bash
while IFS= read -r line; do
echo "Text read from file: $line"
done < "$1"
의 이 파일명을 되어 있는 readfile
을 사용하다
chmod +x readfile
./readfile filename.txt
파일이 표준 POSIX 텍스트 파일이 아닌 경우(= 줄 바꿈 문자로 종료되지 않음), 루프를 수정하여 후행 부분 행을 처리할 수 있습니다.
while IFS= read -r line || [[ -n "$line" ]]; do
echo "Text read from file: $line"
done < "$1"
서서,,|| [[ -n $line ]]
이 '하다'로 됩니다.\n
)read
는 EOF)가 발생했을 때 0이 아닌 종료 코드를 반환합니다.
수 있는 는, 「」가 , 「」가 .read
다른 것(표준 파일 기술자 제외)에 접속할 수 있습니다.다음은 예를 제시하겠습니다.
while IFS= read -r -u3 line; do
echo "Text read from file: $line"
done 3< "$1"
의 셸은 경우가 ).read -u3
; ; ;read <&3
★★★★★★★★★★★★★★★★★★」
도 꼭 하시길 바랍니다.-r
을 들다read
★★★★
-r Do not treat a backslash character in any special way. Consider each
backslash to be part of the input line.
에서 인용하고 있습니다.man 1 read
.
또 하나는 파일명을 인수로 삼는 것입니다.
업데이트된 코드는 다음과 같습니다.
#!/usr/bin/bash
filename="$1"
while read -r line; do
name="$line"
echo "Name read from file - $name"
done < "$filename"
다음 Bash 템플릿을 사용하면 파일에서 한 번에 하나의 값을 읽고 처리할 수 있습니다.
while read name; do
# Do what you want to $name
done < filename
#! /bin/bash
cat filename | while read LINE; do
echo $LINE
done
용도:
filename=$1
IFS=$'\n'
for next in `cat $filename`; do
echo "$next read from $filename"
done
exit 0
「 」를 .IFS
그렇지 않으면 이상한 결과를 얻을 수 있습니다.
많은 사람들이 지나치게 최적화된 솔루션을 게시하고 있습니다.틀리다고는 생각하지 않지만, 모든 사람이 이 방법을 쉽게 이해할 수 있도록 덜 최적화된 솔루션이 바람직하다고 겸허히 생각합니다.제 제안은 다음과 같습니다.
#!/bin/bash
#
# This program reads lines from a file.
#
end_of_file=0
while [[ $end_of_file == 0 ]]; do
read -r line
# the last exit status is the
# flag of the end of file
end_of_file=$?
echo $line
done < "$1"
입력 파일과 사용자 입력(또는 stdin의 다른 것)을 모두 처리해야 하는 경우 다음 솔루션을 사용합니다.
#!/bin/bash
exec 3<"$1"
while IFS='' read -r -u 3 line || [[ -n "$line" ]]; do
read -p "> $line (Press Enter to continue)"
done
수락된 답변과 bash-hackers 리다이렉션 튜토리얼을 기반으로 합니다.
여기서는 스크립트 인수로 전달된 파일의 파일 기술자3 을 열고,read
이 디스크립터를 입력으로 사용합니다(-u 3
따라서 기본 입력 기술자(0)는 단말기 또는 다른 입력 소스에 연결된 상태로 사용자 입력을 읽을 수 있습니다.
올바른 오류 처리를 위해:
#!/bin/bash
set -Ee
trap "echo error" EXIT
test -e ${FILENAME} || exit
while read -r line
do
echo ${line}
done < ${FILENAME}
bash에서 IFS(Internal Field Separator) 도구를 사용하여 행을 토큰으로 구분하기 위해 사용하는 문자를 정의합니다.기본적으로는 <tab> / <space> / < newLine >가 포함됩니다.
1단계: 파일 데이터를 로드하고 목록에 삽입합니다.
# declaring array list and index iterator
declare -a array=()
i=0
# reading file in row mode, insert each line into array
while IFS= read -r line; do
array[i]=$line
let "i++"
# reading from file path
done < "<yourFullFilePath>"
2단계: 이제 출력을 반복하여 인쇄합니다.
for line in "${array[@]}"
do
echo "$line"
done
배열 내 에코 고유 인덱스:배열 변수 액세스:
echo "${array[0]}"
다음은 파일 내용만 출력합니다.
cat $Path/FileName.txt
while read line;
do
echo $line
done
언급URL : https://stackoverflow.com/questions/10929453/read-a-file-line-by-line-assigning-the-value-to-a-variable
'programing' 카테고리의 다른 글
Bash 문자열에서 고정 접두사/서픽스 제거 (0) | 2023.04.17 |
---|---|
파일을 일괄 정렬하는 방법 (0) | 2023.04.17 |
각 디렉토리의 파일 수를 어떻게 계산합니까? (0) | 2023.04.17 |
특정 열에 데이터가 포함된 마지막 행을 찾으려면 어떻게 해야 합니까? (0) | 2023.04.17 |
*nix의 ipython에서 vi 키를 사용하는 방법 (0) | 2023.04.17 |