[bash: while, read, <] 텍스트 파일을 한줄씩 읽어서 작업하기 리눅스 bash script

텍스트 파일을 한줄씩 읽어서 순차적으로 작업을 해야 할 경우, while과 read 명령을 조합하고 I/O 리다이렉션(redirection)으로 파일을 열어 주면 된다. 예시를 보면 금방 감을 잡을 수 있을 것이다.

예를 들어 my_data.txt 파일을 한줄씩 읽어서 행번호와 함께 출력하는 경우를 생각해 보자. 아래와 같은 형태가 될 것이다.

# 행번호 초기값 설정
line_num=1
# 파일에 대한 작업
while read -r rline
do

  # 행번호와 read 명령으로 읽은 행 출력
  echo "$line_num : $rline"
  # 행번호 1 증가
  ((line_num++))
done < my_data.txt

행번호는 변수 line_num에, 파일로 부터 읽어들인 행은 변수 rline에 할당된다. while 명령의 마지막 부분에 처리하고자 하는 텍스트 파일(my_data.txt)을 리다이렉션해서 보냈다.

read 명령에서 유의해야 할 것은 -r 옵션이다. 텍스트 파일에 별표(*), 역슬래시(\) 등 shell에서 사용하는 특수 기호가 포함되어 있을 경우에 대비해서 이런 부분을 처리하지 말고 그냥 문자열로만 해석하도록 추가하는 옵션이므로 잊지 말고 적용하자.



핑백

  • 반달가면 : [bash: read, while] 공백을 포함한 이름을 가진 파일들에 대한 반복 작업 - 2 2016-12-28 23:09:55 #

    ... 하기 위해 임시 파일을 만들고 sed까지 동원해서 스크립트를 만들었는데, 그보다 훨씬 간편하고 우아한 방법이 있어서 정리해 두기로. 예전에 적었던 while 반복문을 이용한 텍스트 파일 한줄씩 읽기와 같은 방식으로 하면 된다. 파일을 읽는 것이 아니라 ls 또는 find 명령으로 얻은 파일명에 대해 작업을 해야 하므로 파이프(|)를 이 ... more

  • 반달가면 : [bash: iconv] iconv를 이용한 텍스트 인코딩 확인 2017-08-04 20:30:22 #

    ... lt" done &lt; "$enc_list_file" 위와 같은 내용으로 encoding_id.sh라는 이름의 스크립트를 만든다. 간단히 설명하자면, while 반복문에 read 명령을 조합하여 인코딩 목록을 하나식 읽어서 iconv의 -f 옵션에 적용시킨 형태다. 인코딩 명칭과 변환된 내용이 같은 줄에 있도록 하기 위해 인코딩 명칭 ... more

  • 반달가면 : [bash: sync] 계속 파일 구성이 변하는 디렉토리에 대한 작업에 대한 문제 2017-09-19 23:46:39 #

    ... . 이후 while 반복문으로 이 파일을 읽어서 하나씩 작업. (mktemp 관련 내용은 여기로, 파일의 내용을 한줄씩 while 반복문에 적용하는 방식에 대한 내용은 여기로) # 임시 디렉토리를 만들고 디렉토리 이름을 변수 tmp_dir에 할당 tmp_dir=`mktemp -d /dev/shm/my_tmp_dir_XXXX` # 무한 ... more

  • 반달가면 : 상관 관계 자료를 2차원 연관 배열(associatve array)에 할당 2019-09-23 21:18:16 #

    ... ond_idx]} " done echo " " done 위 스크립트에 대한 이해에 도움이 될 만한 이전 게시물들은 아래와 같다. 텍스트 파일을 한줄씩 읽어서 작업하기 리눅스 bash 스크립트에서 연관 배열 사용하기 리눅스 bash 스크립트에서 연관 배열의 인덱스/키 출력하기 ... more

덧글

댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.

Google Analytics


B-Side


adsense(w160_h600)2

통계 위젯 (화이트)

151646
3914
2013163

ad_widget_2