2013-08-04 5 views
1

tmp1 및 tmp2없이 어떻게 할 수 있습니까? . 당신의 통찰력 (그것 FUNC 정말 나는 당신이 내가 tmp2를 사용하는 방법을 볼 것이다 단지를 변경하려면 그나마 및 info_file2)쉘 스크립트 - tmp 파일을 사용하지 않으려 고합니다

 cat information_file1 | sed -e 's/\,/\ /g' >> tmp1 
     echo Messi >> tmp2 
     cat tmp1 | grep Ronaldo | cut -d"=" -f2- >> tmp2 
     rm tmp1 
     cat information_file2 | fin_func tmp2 
     rm tmp2 

fin_func (정보 파일은 좋다)

while read -a line; do 

if [[ "`grep $line $1`" != "" ]]; then 
echo 1 
fi 

done 
+1

fin_func는 무엇이며 파일 이름을 가져 와서 거기에서 읽는 대신 파이프/표준 입력에서 가져올 수 있습니까? ($ 1 - 예를 들어 fin_func 그렙 $ ... 1 년 않음) 입력을 유도 할 수있는 기능 (동안과 info_file2 읽기)의 fin_func – tuckermi

+0

도 사용이 parametr로 tmp2 당신은 grep'이 실행되지 않습니다'알고 –

+0

? 그것은 단지 문자열 일 뿐이며'\'... \''또는'$ (...)'가 실행되기를 원하지 않는다면 놓치기 만하면됩니다. – Gumbo

답변

1

cat information_file2 | fin_func <(cat <(echo Messi) <(cat information_file1 | \ 
    sed -e 's/\,/\ /g' | grep Ronaldo | cut -d"=" -f2-)) 

<(…) 구문의 이름을 반환 Bash’s process substitution이다 : 그것은 꽤 incomprehensive 비록

이 작동한다 파일 과 파일 디스크립터를 출력합니다. 우리는 적어도 하나 개의 임시 파일이 필요합니다 해당 기능을 수정하도록 허용하지 않는, 그래서

+0

가 작동하지 않습니다. 나는 내 코드 tmp2가 원인이며, fin_func에서 $ 1로 사용한다고 생각한다. 여기에 그냥 정기적으로 입력하십시오. bash가 아니라 sh를 기억하십시오. –

+0

@ KobiGuetta 그래서 Bourne Shell 또는 어느 쉘입니까? – Gumbo

+0

해당 #!/bin/sh. 그래서 나는 평범한 쉘이라고 생각한다. –

0

샘플 fin_func는 명령 인수를 여러 번로 주어진 파일을 읽습니다. 질문에 주어진 fin_func 샘플은 파일을 여러 번 읽지 않도록 쉽게 수정할 수 있지만 실제 스크립트가 아니라는 것을 나타내므로 수정할 수없고 파일을 인수로 사용해야한다고 가정합니다. 내가 강력하게 입력으로 일반 파일이 필요하지 않도록 fin_func 다시 작성 될 수 있다고 생각

trap 'rm -f $TMPFILE' 0 # in bash, just trapping on 0 will work for SIGINT, etc 
TMPFILE=$(mktemp) 

{ echo Messi 
tr , ' ' < information_file1 | 
awk -F= '/Ronaldo/{print $2}' ; } > $TMPFILE 
< information_file2 fin_func $TMPFILE 

: 즉 나는 당신의 스크립트를 작성 것이라고 말했다. 또한 tr은 필요하지 않습니다. gsubawk과 일치하는 라인에서만 사용하고 약간의 처리를 절약 할 수는 있지만, 이는 아마도 사소한 최적화 일 것입니다. 그러나 sed 대신 tr을 사용하는 것은 심미적으로 필요합니다.

관련 문제