티스토리 뷰
안녕하세요. 개발개입니다.
이번 글에서는 1) 파일을 라인 단위로 읽은 결과나 2) 명령어 처리 결과에 대한 다중 결과를
while 문을 통해 반복 처리하는 방법에 대해 알아보도록 하겠습니다.
오타, 오류 혹은 기타 의견은 언제든지 환영합니다.
1. 파일을 라인 단위로 읽어 반복 처리
- Redirection을 이용하는 경우
#!/bin/bash
while read [라인변수명]; do
[반복작업할 내용 작성]
done < [파일명]
- Pipeline을 이용하는 경우
#!/bin/bash
cat [파일명] | while read [라인변수명]; do
[반복작업할 내용 작성]
done
예시 1)
특정 디렉토리에 있는 파일 명을 파일(filelist.txt)에 저장하고
이로부터 읽어들인 각 라인(file 변수)을 출력하기
1-0) 대상 파일 목록(files 디렉토리)을 확인합니다.
1-1) files 디렉토리 내에 있는 파일 목록을 filelist.txt에 저장합니다.
ls files > filelist.txt
1-2) cat 명령어를 통해 filelist.txt 내용 확인할 수 있습니다.
cat filelist.txt
1-3) vi 명령어를 이용하여 readFromFile.sh 이름으로 shell script를 작성합니다.
vi readFromFile.sh
- Redirection을 이용한 경우
#!/bin/bash
while read file; do
# file: 읽어올 라인에 대한 변수명 지정
echo $file
# 변수 file의 값을 불러와 출력
done < filelist.txt
# filelist.txt로부터 읽어들임
- Pipeline을 이용한 경우
#!/bin/bash
cat filelist.txt | while read file; do
# cat filelist.txt 결과 값을 while 문으로 전달
# file: 읽어올 라인에 대한 변수명 지정
echo $file
# 변수 file의 값을 불러와 출력
done
1-4) 실행권한을 부여한 후 실행합니다.
chmod +x readFromFile.sh
./readFromFile.sh
1-5) 결과를 확인합니다.
2. 명령어 처리 결과에 대해 반복 처리
#!/bin/bash
[다중결과값을 가지는 명령어] | while read [라인변수명]
# ls 명령어의 결과값을 while문에 전달
# file : 읽어올 라인에 대한 변수명 지정
do
반복작업할 내용 작성
done
예시 2)
디렉토리 내용을 조회하는 ls 명령어의 결과를 출력하기
2-0) 대상 파일 목록(files 디렉토리)을 확인합니다.
2-1) vi 명령어를 이용하여 readFromCmd.sh 이름으로 shell script를 작성합니다.
#!/bin/bash
ls files | while read file
# ls 명령어의 결과값을 while문에 전달
# file : 읽어올 라인에 대한 변수명 지정
do
echo $file
# 변수 file의 값을 불러와 출력
done
2-2) 실행권한을 부여한 후 실행합니다.
chmod +x readFromCmd.sh
./readFromCmd.sh
2-3) 결과를 확인합니다.
응용 예시 )
현재 폴더를 기준으로 txt 확장자를 가진 모든 파일을 찾아
그 중 'APPLE'이라는 단어를 포함하는 파일만 result.out 파일에 쓰기
#!/bin/bash
find ./ -name '*.txt' | while read result
do
if cat $result | grep -qi 'APPLE'; then
# -q 옵션 : --quiet. 출력없이
# -i 옵션 : --ignore-case. 대소문자 구분없이
echo $result
fi
done > result.out
# echo 값을 result.out 파일에 씀
참고사항
while과 do를 inline으로 작성하려면 세미콜론(;)이 필요하다.
라인 분리를 할 경우 세미콜론이 필요하지 않다.
다음 두 예문은 같은 내용이다.
while read line
do
echo $line
done < file.txt
while read line; do
echo $line
done < file.txt
본 글은 다음을 참고하여 작성되었습니다.
https://twpower.github.io/155-use-file-or-command-ouput-in-while-loop
'KR > Linux' 카테고리의 다른 글
[리눅스마스터] 리눅스 실무의 이해 - 리눅스의 개요 (0) | 2020.08.01 |
---|---|
[리눅스마스터] 시험 정보 (0) | 2020.08.01 |
[UNIX/LINUX] 파일 찾기 - which / whereis / find / grep 명령어 사용 방법 (0) | 2019.09.06 |
[WINDOWS ↔ UNIX/LINUX] pscp 명령어 사용 방법 (0) | 2019.09.05 |
[UNIX/LINUX] scp 명령어 사용 방법 (0) | 2019.08.06 |