[완료] Bash 스크립트에서 IFS로 파일 읽기 문제..

nomail의 이미지

안녕하세요.
Bash 스크립트를 어느정도 능숙하다고 생각하는데 할때 마다 문제에 부딪치네요ㅠㅠ

한줄짜리 텍스트 파일이 있고 하이픈(-)으로 값들이 분리되어 있습니다.

sever1-server2-server3-server4-server ...

Bash 스크립트에서 위 내용을 1개씩 읽을려고 아래처럼 작성했습니다.

while IFS=- read val; do
    echo $val
done < file

IFS 내부변수에 하이픈 값을 셋팅하면 read로 읽을 때 분리하여 읽을거라 예상했는데
이상하게 한줄을 그대로 읽어버립니다.
구글링하여 IFS를 용도와 역할을 파악 해보면 분명 저렇게 쓰는게 맞는것 같은데 결과가 이상합니다ㅠㅠ
제가 잘못 알고 있는건지.. 도무지 모르겠습니다.
잘 하시는 분 도움 좀 부탁드립니다.

ymir의 이미지

read 는 line 단위로 읽어들이고 변수는 하나이기 때문에, $val 에는 전체 한 줄만 들어가 있는게 맞습니다.
IFS 가 - 로 바뀌었기 때문에, 출력할 때에는 공백으로 보일 수는 있겠지만요..

$ cat in.txt
server1-server2-server3-server4-server5
$ IFS=-; while read line; do for val in $line; do echo $val; done; done < in.txt; unset IFS
server1
server2
server3
server4
server5

라인 한 줄만 있다면, 그냥 변수에 넣고 loop 돌리는것도 괜찮겠네요.

$ cat in.txt
server1-server2-server3-server4-server5
$ IFS=-; line=$(cat in.txt); set -a $line; until [ -z "$1" ]; do echo $1; shift; done; unset IFS
server1
server2
server3
server4
server5

read 로 텍스트를 필드별로 나눠서 읽는 방법은 아래 링크 참조하세요.

http://bash.cyberciti.biz/guide/$IFS

$ IFS=$'-'; while read a b c etc; do echo $a/$b/$c/$etc; done < in.txt; unset IFS
server1/server2/server3/server4 server5

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

nomail의 이미지

ymir님 매번 도움 주셔서 감사드립니다.
상세하게 설명 해주셔서 금방 파악했구요.
예제를 보니까 이제 사용법을 정확히 알겠습니다.
제가 read 사용법과 개념을 그동안 잘못 알고 있었네요..ㅠㅠ
예제와 답변 참고하여 덕분에 깔끔하게 해결했습니다. 너무 고맙습니다^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.