read: bash 한 줄씩 읽어서 처리

markyang92·2021년 9월 9일
0

shell-script

목록 보기
16/19
post-thumbnail
#!/bin/bash

echo -n "Enter your id:"
read ID

if [[ "$ID" == [0-9]* ]]; then
	echo "Invalid ID"
    exit -1
fi

한 줄씩 읽어 처리

  • bash의 read를 사용한다.
  • readSTDIN을 읽는다.
  • 보통 redirect, pipe를 사용해 stdin으로 보내 전달한다.

명령어 결과를 한줄 씩 처리

  1. Pipeline을 이용한다.
ls ./path | while read line
do
    echo $line
done


ls /specific/path | while read line
do
    echo $line
done

파일을 한줄 씩 처리

  1. Redirection 이용
while read line
do
    echo $line
done < test.txt

  1. Pipeline 이용
cat test.txt | while read line
do
    echo $line
done

awk 를 이용해 많은 양 처리하자

| while read line

  • 주의사항!! | pipe 로 연결된 명령들은 subshell에서 실행된다!!!
    따라서 | PIPE 연결한 명령의 & (bg) 실행은 밖 wait에서 안기다린다!
  • awk 이용해 해결하자
LINE_NO=$(cat 'file' | wc -l) # 몇 줄 라인인지 읽음
for ((i=1; i<=${LINE_NO}; i++)); do # 반드시 1 <= LINE_NO 임을 명심
    THIS_LINE=$(awk "NR==$i" ${COMMAND_FILE})
    "많은 양 처리" & # 백그라운드 실행
done
wait # 백그라운드 기다림
profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글