programing

변수에 값을 할당하는 한 줄씩 파일 줄 읽기

starjava 2023. 4. 17. 21:13
반응형

변수에 값을 할당하는 한 줄씩 파일 줄 읽기

다음 .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

반응형