bash] 스크립트 안에서 파일을 라인 단위로 입력받기

송지석의 이미지

스크립트 안에서 텍스트 파일을 읽어볼 필요가 있을 때가 있는데 for i in `cat filename` 하면 한줄씩이 아니라 한 단어씩 읽힙니다. 한줄씩 읽을 때는 이런 방법을 찾았는데요. 더 나은 방법이 있을 수도 있지만 일단 올립니다.

#!/bin/bash

exec < $1

while read line
do
    echo $line
done

스크립트 파일 내부에서 리디렉션 사용하는 겁니다. 인자($1)로 주어진 파일을 표준입력으로 리디렉션해서 read로 읽어버리는 거지요.
Forums: 
송효진의 이미지

beautiful~

이거 참 쓸데가 많군요.
감사합니다.

alfalf의 이미지

아래와 같이 하셔도 됩니다.

#!/bin/bash 

while read line 
do 
    echo $line 
done < $1

부가적으로 read는 column 단위로 나뉘어 있는 줄들도 잘 읽을 수 있습니다.
예를 들어 'test.txt'라는 파일의 내용이 아래와 같을때

a A 1 aaa AAA 111
b B 2 bbb BBB 222
...

아래의 코드는

#!/bin/bash 

while read A B C ETC
do 
    echo "${A}-${B}-${C}-${ETC}"
done < test.txt

아래와 같은 결과를 출력합니다.

a-A-1-aaa AAA 111
b-B-2-bbb BBB 222
...