CSV 파일 읽기

CSV 파일 읽기

Books.txt책 이름과 대출자의 이름이 포함된 파일이 있습니다 . BOOKXXXX는 책의 제목이고 XXXX는 번호입니다. 여기에 예가 있습니다.

BOOK2592,1,2,3,4,5,22
BOOK1234,3,4,5
BOOK0999,4,5,6,7
BOOK0666,10,33,4,5
BOOK2222,1,3,4,5,6,7,88,98,3

이 파일을 사용하여 특정 계정에서 이 책을 빌렸는지 확인해야 합니다.

이 책을 몇 번이나 대출받았는지 알아보고 싶은데 해결책이 떠오르지 않네요?

답변1

가지다진짜 일부 독립적인원래 질문의 요청이지만 "계정을 빌린 책"에 대답하기 위해 awk를 사용하는 것은 다음과 같습니다.

cat book.sh 
#!/bin/bash
awk -F"," -v acc=$1 '
{
  for(i=2;i<=NF;i++){
    if($i ~ acc ){
      print $1
    }
  }
}' Books.txt

그러면 다음과 같은 출력이 제공됩니다.

$ ./book.sh 4
BOOK1234
BOOK0999

답변2

Perl은 뛰어난 텍스트 처리 언어입니다. 구문은... 놀랍지만 데이터 구조는 매우 유연합니다.

perl -F, -lane '
    $book = shift @F; 
    $books{$book} = [@F]; 
    push @{$users{$_}}, $book for @F; 
} 
END {
    $book="BOOK1234"; 
    printf "book %s has been borrowed %d times, by users %s\n", 
               $book, 
               scalar(@{$books{$book}}), 
               join(",",@{$books{$book}}); 
    $user="1"; 
    printf "user %s has borrowed %d books, %s\n", 
               $user, 
               scalar(@{$users{$user}}), 
               join(",",@{$users{$user}})
' Books.txt
book BOOK1234 has been borrowed 4 times, by users 1,2,3,4
user 1 has borrowed 2 books, BOOK1234,BOOK2334

답변3

이를 수행하는 데는 여러 가지 옵션이 있습니다

  1. 파일을 grep하여 ISBN을 찾은 다음 grep하여 계정을 찾을 수 있습니다.

    # grep account books.txt | cut -d "," -f1

    이것을 출력하다

    BOOK0999

  2. 또는 awk를 사용하여 필요한 것을 필터링할 수 있습니다.
    awk -F ',' '/9/ { print $1} ' books.txt

    이것을 출력하다
    BOOK0999

스크립트를 원한다면 이렇게 할 수 있습니다

#!/bin/bash
acct=$1
while read line; do
    if [[ $line =~ $1 ]]; then
            echo $line | cut -d "," -f1
    fi
done < books.txt

그리고 스크립트를 실행하세요./script acctno

관련 정보