2011-04-20 3 views
0

쉘 스크립트를 작성하려고했지만 특별한 if 문을 수행하는 데 어려움이 있습니다. 파일에서 값을 찾으면 어떤 일을하고 싶습니다. ,쉘 스크립트 파일

1, 2, 2, 8
0, 0, 3, 3
5, 0, 4, 5
1, 4, 5, 3
1, 0 :

내 파일은 다음과 같다 8, 7

나는이 몇 가지 정보

sed -i '/^[0-9][0-9]*, [0-9][0-9]*, 3,/d' file.txt

를 추출 않는다 그러나 나는 세 번째 숫자는 3, 4 또는 5 I입니다 같은 경우 경우 조건에 넣고 싶습니다 ~을해라. sed else 다른 것을 해보겠습니다 :

if [ '/*, *, [3,5],/d' ]; then 
    echo 'ok' 
else 
    echo'fail' 
fi 

그러나 작동하지 않아 항상 인쇄됩니다.

내가 어떻게 할 수 있는지 알고 있니?

+0

은 스크립트가 무엇을해야 하는가를? –

+0

그냥 파일에서 일부 정보를 추출,이 부분은 잘 작동합니다. 원하는 숫자가 그 안에 들어 있지 않으면 스크립트를 개선하고 싶습니다. – tranen

+0

['grep -s '3,'$ filename];이 잘못된 경우 그럼'등? 파일에 맨 3와 쉼표가있는 행이있는 경우 OK를 반환합니다. 그러나 어쨌든 여기서 당신이 무엇을하려고하는지 불분명합니다 ... 파일 이름이 변수에 있습니까? 파일을 배열로 읽었습니까? 정확한 조건 등은 무엇입니까? [그렙 : I이 오류를 얻을 그렙 함께 –

답변

1

' *'은 정해지지 않은 수의 공백과 일치합니다. 대신 [0-9]*을 입력해야합니다.

3

명확 예를 다음에 시간을 제공하십시오

#!/bin/bash 
# tested with bash 4 
while read -r x x Y x 
do 
    case "$Y" in 
    "3,") echo "ok";; 
    *) echo "Not ok";; 
    esac 
done < file 
+0

+1. 나는'-r' 옵션을 읽을 줄 몰랐다. –

+0

하지만 숫자가 하나뿐입니다. 나는 3-4-5를 원한다면 어떨까요? – tranen

+0

@ tranen, 그럼 당신은 당신이 원하는 것에 대한 몇 가지 명확한 예를 더 잘 보여줄 것입니다. 입력 파일의 가능한 모든 형식을 지정하십시오. 충분한 정보가 없으면 질문에 대한 정확한 대답을 기대하지 않을 것입니다. –

0

당신은 내부 - 필드 분리기를 사용하고 쉘이 해석에 대해 알아서 할 수

#!/bin/sh 
# let's create the input file 
echo '5, 2, 3, 5' > /tmp/myfile 

# function will output third argument 
third() { IFS=', '; echo $3; } 

# now let's print the third value from the input file 
third $(cat /tmp/myfile) 

하는 사람 쉬를 참조하고, IFS를 찾아 그것에 대해 더 자세히 알고 싶습니다.

+0

답변을 주셔서 감사하지만 if 루프를 수행하지 않았습니다. – tranen

0

당신이 쉘 전용 솔루션 사용을 강요하지 않는 경우 당신은 AWK로 세 번째 필드 얻을 수 있습니다 :

#!/bin/sh 
THIRD=$(awk -F', ' '{print $3}' < /tmp/myfile)