쉘 스크립트를 이용하여 파일의 내용들을 한줄 한줄 차례대로 뽑아내야 하는데 어떻게 해야 할지 감이 안잡히네요. 파일에서 첫번째 줄, 두번째 줄, 세번째 줄 이런식으로 차례차례 내용의 빼내야 하는데 어떻게 해야하는지 조언 부탁드립니다.
for를 이용할 경우
for line in $(cat 파일명) do echo $line ... 어쩌구 저쩌구 done
while을 이용할 경우
while read line do echo $line ... 어쩌구 저쩌구 done < 파일명
두가지 모두 각각의 한줄 한줄은 line 변수에 들어갑니다.
제가 사용하는 무식한 방법입니다.
NUM=0 while [ `echo ${LINE} | awk '{ print $1 }'` != "" ]; do LINE=`cat -n ./hmm4/hmmdefs | grep ^[[:space:]]*${NUM}[[:space:]] | sed s/^[[:space:]]*[[:digit:]]*//g` echo ${LINE} let "NUM += 1" done
더 낳은 방법도 있을것 같은데 모르겠더군요. 더 괜찮은 방법을 알고 계신분은 답변 달아주세요.
ps. 위에 글쓰신분 두번째 방법으로 하니 한라인씩 읽어오네요. 한수 배웠습니다. :)
추출할꺼라는 말씀이 마음에 걸려서..... :roll:
어떤 파일의 각 행을 전부 다른 파일로 만들어서 저장하고 싶다면..
엥..
설마 그걸 바란걸 아니시겠지만..
$awk '{print $0 > NR}' filename
하셔도 됩니다.
행번호로 파일을 생성합니다.
천라인이면 파일 1000개......
FOREVER_Ch@oS
bash에서 for 나 while을 사용하세요.
for를 이용할 경우
while을 이용할 경우
두가지 모두 각각의 한줄 한줄은 line 변수에 들어갑니다.
위같이 하면 공백이 잘릴껄요.
제가 사용하는 무식한 방법입니다.
NUM=0 while [ `echo ${LINE} | awk '{ print $1 }'` != "" ]; do LINE=`cat -n ./hmm4/hmmdefs | grep ^[[:space:]]*${NUM}[[:space:]] | sed s/^[[:space:]]*[[:digit:]]*//g` echo ${LINE} let "NUM += 1" done더 낳은 방법도 있을것 같은데 모르겠더군요.
더 괜찮은 방법을 알고 계신분은 답변 달아주세요.
ps. 위에 글쓰신분 두번째 방법으로 하니 한라인씩 읽어오네요.
한수 배웠습니다. :)
awk를 쓰면
추출할꺼라는 말씀이 마음에 걸려서..... :roll:
어떤 파일의 각 행을 전부 다른 파일로 만들어서 저장하고 싶다면..
엥..
설마 그걸 바란걸 아니시겠지만..
$awk '{print $0 > NR}' filename
하셔도 됩니다.
행번호로 파일을 생성합니다.
천라인이면 파일 1000개......
FOREVER_Ch@oS