读取 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 文件查找书号,然后 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

相关内容