간단한 쉘스크립트 문제입니다. -_-;;

netizn82의 이미지

안녕하세요.;

PHP를 하다가 쉘스크립트를 공부할려니, 어려운게 이만저만이 아니네요 ㅠㅠ

다름이 아니라 간단한건데,


---------1.txt-----------
aaa|bbb
-------------------------

1.txt파일에 | 파이프라인을 가운데 두고 2개의 문자가 있습니다.

저걸 따로따로 출력을 하고싶은데요...

PHP에서는


$test=explode("|",$getFile);
echo $test[0];
echo $test[1];

각각 배열로 들어가지않습니까...

리눅스의 쉘스크립트에서는 어떻게해야할지.. 도저히 감을 모르겠습니다.

도움을 주세요~

---------쉘 스크립트 소스입니다.---------------


#!/bin/bash

DIR="/study/folder"
A=`ls -R $DIR | grep : | tr -d :`

for i in `echo $A`
do
  B=`ls -l $i | grep ^- | awk '{print $9}'`
  if [ "$B" != "" ]; then
    for j in `echo $B`
    do
      NEO_STR=`cat $DIR/$j`
      echo $NEO_STR 이부분 에서 "aaa|bbb" 출력
    done
  fi
done

-----------------------------------------------------

sim2e의 이미지

cat "$DIR/$j" | cut -d '|' -f 1
cat "$DIR/$j" | cut -d '|' -f 2

cut -d '|' -f 1 "$DIR/$j"
cut -d '|' -f 2 "$DIR/$j" 

echo "$NEO_STR" | cut -d '|' -f 1
echo "$NEO_STR" | cut -d '|' -f 2

cat 후에 cut 하는 건 낭비네요. 처음에 왜 저렇게 달았지 ㅋㅋ..

jellypo의 이미지

#!/bin/bash
 
DIR="/study/folder"
A=`ls -R $DIR | grep : | tr -d :`
 
for i in `echo $A`
do
  B=`ls -l $i | grep ^- | awk '{print $9}'`
  if [ "$B" != "" ]; then
    for j in `echo $B`
    do
      NEO_STR=`cat $DIR/$j`
      gawk -F\| '{print $NEO_STR}; { print $1}; { print $2 }' 1.txt
    done
  fi
done

awk/gawk에서 개행문자(\n)를 어떻게 쓰는지 몰라서 print를 두번 사용 했습니다. 더 간단히 할 방법이 없을까요?

구분자를 |로 하기 위해서 -F 옵션 뒤에 |를 썼는데 |만 쓰면 안되더군요. \|를 써야 인식되네요.

쉘 스크립트 자체를 직접 실행해본건 아니지만 aaa bbb 분리는 잘 됩니다.

jellypo@JellyKing:~$ cat abab
aaa|bbb
jellypo@JellyKing:~$ gawk -F\| '{ print $1}; { print $2 }' abab
aaa
bbb
jg의 이미지

echo "test,b" | awk 'BEGIN { FS=","; } { print $1"\n"$2; };'
echo "test,b" | awk 'BEGIN { FS=","; } { printf "%s\n%s\n", $1, $2; };'

이렇게 하시면 됩니다.

@ 저도 awk 추천합니다.
awk(mawk)가 cut이나 sed 보다 빠른 경우가 많습니다.

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

netizn82의 이미지

sim2e님, JellyPo님

두분모두 친절한 답변 고맙습니다. ^^

무슨일이든지 할수있다고 하는사람이 하는법이다.
의심하면 의심하는것밖에 하지못하고
할수없다고하면 할수없는것이다.

pung96의 이미지

bash 문법만으로도 끝낼수 있습니다.
보통 2가지 방법을 쓰는데

1.
value = ( ${NEO_STR/|/ } )
echo ${value[0]}
echo ${value[1]}

2.
OIFS=$IFS;IFS='|';
value =($NEO_STR);
IFS=$OIFS;
echo ${value[0]}
echo ${value[1]}

jg의 이미지

리스트는 bash의 확장기능이라서 이식적이지 못하더군요.

OIFS=$IFS;IFS='|';
for var in $NEO_STR; do echo "$var"; done
IFS=$OIFS;

이게 더 이식적이라 생각합니다.

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

pung96의 이미지

좋은 지적이네요

for의 경우 문자열을 여러개의 변수로 파싱하기 좀 곤란한 면이 있죠
약간 다른 방법이기는 하지만 파일로부터 읽을 경우

OIFS=$IFS;IFS='|';
read val1 val2 < $DIR/$j
IFS=$OIFS;
 
echo $val1
echo $val2

같은 방법이 있습니다.

댓글 달기

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