간단한 쉘스크립트 문제입니다. -_-;;
글쓴이: netizn82 / 작성시간: 금, 2007/02/16 - 7:48오후
안녕하세요.;
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
-----------------------------------------------------
Forums:
cut 을 이용 하세요.
cat 후에 cut 하는 건 낭비네요. 처음에 왜 저렇게 달았지 ㅋㅋ..
awk를 쓰면 이렇게도 됩니다.
awk/gawk에서 개행문자(\n)를 어떻게 쓰는지 몰라서 print를 두번 사용 했습니다. 더 간단히 할 방법이 없을까요?
구분자를 |로 하기 위해서 -F 옵션 뒤에 |를 썼는데 |만 쓰면 안되더군요. \|를 써야 인식되네요.
쉘 스크립트 자체를 직접 실행해본건 아니지만 aaa bbb 분리는 잘 됩니다.
echo "test,b" | awk 'BEGIN
이렇게 하시면 됩니다.
@ 저도 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}
답변 고맙습니다.
sim2e님, JellyPo님
두분모두 친절한 답변 고맙습니다. ^^
무슨일이든지 할수있다고 하는사람이 하는법이다.
의심하면 의심하는것밖에 하지못하고
할수없다고하면 할수없는것이다.
bash 문법만으로도
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]}
bash도 좋긴하지만
리스트는 bash의 확장기능이라서 이식적이지 못하더군요.
이게 더 이식적이라 생각합니다.
$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}
좋은
좋은 지적이네요
for의 경우 문자열을 여러개의 변수로 파싱하기 좀 곤란한 면이 있죠
약간 다른 방법이기는 하지만 파일로부터 읽을 경우
같은 방법이 있습니다.
댓글 달기