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

関連情報