간단한 shell 프로그램을 짜던중 막혀서 글을 남깁니다.

lhl9789의 이미지

WORK_YYYYMMDD=$1
RUN_DATE=$(date +%Y%m%d) # 작업(오늘)날짜
IN_FILE=/DB/home/data/CMC${WORK_YYYYMMDD}_copy.dat # Input File
while read line; do
echo ${line} | cut -c 33-72 >> Test${WORK_YYYYMMDD}.dat
echo ${line} | cut -c 73-92 >> Test${WORK_YYYYMMDD}.dat
echo ${line} | cut -c 93-94 >> Test${WORK_YYYYMMDD}.dat
echo ${line} | cut -c 95-98 >> Test${WORK_YYYYMMDD}.dat
echo ${line} | cut -c 99-106 >> Test${WORK_YYYYMMDD}.dat
echo ${line} | cut -c 107-107 >> Test${WORK_YYYYMMDD}.dat
echo '\n' >> Test${WORK_YYYYMMDD}.dat

done < ${IN_FILE}

파일에 있는 여러개의 행을 읽어서 각 행단 특정 부분만 짤라내여 이어서 새로운 파일로 만드는 간단한 스크립트를 짜는 중인데요 제 목적은 만일 원본 파일이 아래와 같다면요

123이456여789사
aaa김bbb여ccc사
bbb박bbb여ccc사

실제 생기는 출력 파일인 Test${WORK_YYYYMMDD}.dat 파일은요

이여사
김여사
박여사

이렇게 만들고 싶은데 실제로 돌려보면









이렇게 되는데요.. while에서 가장 마지막에 \n을 붙여서 줄바꿈하고 싶고 중간에는 하기가 싫은데 방법이 없을까요.
-n 옵션이 줄바꿈 없애는 거래서 없애는데도 자꾸 똑같이 나오네요 ㅠㅠ.. 혼자 한 삼일을 끙끙 앓다가 도저히 모르겠어서 올립니다.. 고수님들 도와주세요~

qiiiiiiiip의 이미지

new line을 넣는게 echo가 아니라 cut이기 때문입니다. (-n은 echo의 옵션)

작성하신 스크립트를 아래와 같이 수정하시면 됩니다. (cut에 의해 만들어지는 new line을 제거)
아래와 같이 cut이 있는 모든 라인에 tr -d '\n'을 넣어주세요

...
echo ${line} | cut -c 107-107 | tr -d '\n' >> Test${WORK_YYYYMMDD}.dat

그러나, cut등의 유틸들은 이미 라인단위로 동작하므로, 다시 루프를 돌리지 마시고,
아래와 같이 한번에 처리하시는 게 좋습니다.

cut -c 33-72,73-92,93-94,95-98,99-106,107-107 $IN_FILE > $OUT_FILE

그런데 33,72같이 숫자를 하드코딩하는게 맞는지는 다시 한번 생각해보시는게 좋겠네요..
차라리 raw data를 만들때 적당한 구분자를 넣어서 만드시는게..

readme의 이미지

Bash라면 이것도 괜찮은 방법일지도 모르겠네요.

(구지 while read line한다면)

while read line;do echo ${line:3:1}${line:7:1}${line:11:1} ;done < $INPUT_FILEPATH

BASH내부에서 문자열 조작하는 방법은 다음 위키 페이지를 참고해 보세요.
http://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/string-manipulation.html

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.