2014-01-30 6 views
0

내 텍스트 파일 안에 제목, 저자, 가격순으로 책 목록이 있습니다. ":"구분 예를 들어 ,텍스트 파일의 Bash 인쇄

Harry Potter - The Half Blood Prince:J.K Rowling:39.99 

제목, 저자 및 가격은 모두와 함께 분리된다.

제목 및 저자별로 검색 할 수있는 두 가지 옵션이 있습니다. 둘 중 하나라도 비어 있으면 Enter가 읽 힙니다.

elif [ "$title" == "" ] 
then 
    count=`grep -c "$author" Books.txt` 
    echo "Found $count Records: " 
    awk "/$author/" Books.txt  
    if [ "$count" -eq 0 ] 
    then 
     echo "Book not found!" 
    fi 
elif [ "$author" == "" ] 
then 
    count=`grep -c "$title" Books.txt` 
    echo "Found $count Records: " 
    awk "/$title/" Books.txt   
    if [ "$count" -eq 0 ] 
    then 
     echo "Book not found!" 
    fi 

아무 문제 검색 및 인쇄가 없다하지만 난 제목 필드에 저자의 이름을 입력 순서를 반전하면, 난 여전히 같은 결과를 얻을 것이다. 무슨 일이야?

답변

1

문자열이 줄의 일부인지 여부를 확인하는 두 개의 동일한 코드가 있습니다. 당신이 제목 필드에 저자를 입력하면, 당신은이 일을 끝낼 :

awk "/$title/" Books.txt 

어떤 '제목이'작가의 이름으로 설정되어있는 경우, 정확하게이 같은 일이 (주어진 않는 $ 저자

awk "/$author/" Books.txt 

가 주어진 컬럼에 대해서만 계산 AWK를 말할 수있는 더 정확한 확인/개선하기 위해, 예 : 저자)도 여기에 이름

author="J.K Rowling" 
awk -F ':' -v author="$author" '$2 == author' Books.txt 

UPDATE를

귀하의 질문, "무슨 일이야"나는 설명이있는, 그러나 여기 (여기 코드 업데이트) 당신을위한 실용적인 솔루션의 일종입니다 :

elif [ "$title" == "" ] 
then 
    count=$(awk -v author="$author" -F ':' '$2 == author { c++ } END { print c }' Books.txt) 
    if [ "$count" -eq 0 ] 
    then 
     echo "Book not found!" 
    else 
     echo "Found $count Records: " 
     awk -v author="$author" -F ':' '$2 == author' Books.txt 
    fi 
elif [ "$author" == "" ] 
then 
    count=$(awk -v title="$title" -F ':' '$2 == title { c++ } END { print c }' Books.txt) 
    if [ "$count" -eq 0 ] 
    then 
     echo "Book not found!" 
    else 
     echo "Found $count Records: " 
     awk -v title="$title" -F ':' '$2 == title' Books.txt 
    fi 

을 ... 내가하지 않은 실제로 모든 코드를 실행하지만 '작동해야합니다';-)

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 내가 어떻게해야하는지 말해 줄 수 있니? – user3001342

+0

당신이 할 수있는 일을 추가하는 업데이트를했습니다 ... 그러나 당신이 알아낼 수있는 것들을 남겨 둡니다;) – bryn

+0

당신이 요구 한 것을 훨씬 뛰어 넘는 솔루션으로 다른 업데이트를 했습니까? – bryn